//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

import Foundation
import SotoCore

extension MediaLive {
    // MARK: Enums

    public enum AacCodingMode: String, CustomStringConvertible, Codable {
        case adReceiverMix = "AD_RECEIVER_MIX"
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode11 = "CODING_MODE_1_1"
        case codingMode20 = "CODING_MODE_2_0"
        case codingMode51 = "CODING_MODE_5_1"
        public var description: String { return self.rawValue }
    }

    public enum AacInputType: String, CustomStringConvertible, Codable {
        case broadcasterMixedAd = "BROADCASTER_MIXED_AD"
        case normal = "NORMAL"
        public var description: String { return self.rawValue }
    }

    public enum AacProfile: String, CustomStringConvertible, Codable {
        case hev1 = "HEV1"
        case hev2 = "HEV2"
        case lc = "LC"
        public var description: String { return self.rawValue }
    }

    public enum AacRateControlMode: String, CustomStringConvertible, Codable {
        case cbr = "CBR"
        case vbr = "VBR"
        public var description: String { return self.rawValue }
    }

    public enum AacRawFormat: String, CustomStringConvertible, Codable {
        case latmLoas = "LATM_LOAS"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum AacSpec: String, CustomStringConvertible, Codable {
        case mpeg2 = "MPEG2"
        case mpeg4 = "MPEG4"
        public var description: String { return self.rawValue }
    }

    public enum AacVbrQuality: String, CustomStringConvertible, Codable {
        case high = "HIGH"
        case low = "LOW"
        case mediumHigh = "MEDIUM_HIGH"
        case mediumLow = "MEDIUM_LOW"
        public var description: String { return self.rawValue }
    }

    public enum Ac3BitstreamMode: String, CustomStringConvertible, Codable {
        case commentary = "COMMENTARY"
        case completeMain = "COMPLETE_MAIN"
        case dialogue = "DIALOGUE"
        case emergency = "EMERGENCY"
        case hearingImpaired = "HEARING_IMPAIRED"
        case musicAndEffects = "MUSIC_AND_EFFECTS"
        case visuallyImpaired = "VISUALLY_IMPAIRED"
        case voiceOver = "VOICE_OVER"
        public var description: String { return self.rawValue }
    }

    public enum Ac3CodingMode: String, CustomStringConvertible, Codable {
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode11 = "CODING_MODE_1_1"
        case codingMode20 = "CODING_MODE_2_0"
        case codingMode32Lfe = "CODING_MODE_3_2_LFE"
        public var description: String { return self.rawValue }
    }

    public enum Ac3DrcProfile: String, CustomStringConvertible, Codable {
        case filmStandard = "FILM_STANDARD"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum Ac3LfeFilter: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum Ac3MetadataControl: String, CustomStringConvertible, Codable {
        case followInput = "FOLLOW_INPUT"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum AcceptHeader: String, CustomStringConvertible, Codable {
        case imageJpeg = "image/jpeg"
        public var description: String { return self.rawValue }
    }

    public enum AfdSignaling: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case fixed = "FIXED"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum AudioDescriptionAudioTypeControl: String, CustomStringConvertible, Codable {
        case followInput = "FOLLOW_INPUT"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum AudioDescriptionLanguageCodeControl: String, CustomStringConvertible, Codable {
        case followInput = "FOLLOW_INPUT"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum AudioLanguageSelectionPolicy: String, CustomStringConvertible, Codable {
        case loose = "LOOSE"
        case strict = "STRICT"
        public var description: String { return self.rawValue }
    }

    public enum AudioNormalizationAlgorithm: String, CustomStringConvertible, Codable {
        case itu17701 = "ITU_1770_1"
        case itu17702 = "ITU_1770_2"
        public var description: String { return self.rawValue }
    }

    public enum AudioNormalizationAlgorithmControl: String, CustomStringConvertible, Codable {
        case correctAudio = "CORRECT_AUDIO"
        public var description: String { return self.rawValue }
    }

    public enum AudioOnlyHlsSegmentType: String, CustomStringConvertible, Codable {
        case aac = "AAC"
        case fmp4 = "FMP4"
        public var description: String { return self.rawValue }
    }

    public enum AudioOnlyHlsTrackType: String, CustomStringConvertible, Codable {
        case alternateAudioAutoSelect = "ALTERNATE_AUDIO_AUTO_SELECT"
        case alternateAudioAutoSelectDefault = "ALTERNATE_AUDIO_AUTO_SELECT_DEFAULT"
        case alternateAudioNotAutoSelect = "ALTERNATE_AUDIO_NOT_AUTO_SELECT"
        case audioOnlyVariantStream = "AUDIO_ONLY_VARIANT_STREAM"
        public var description: String { return self.rawValue }
    }

    public enum AudioType: String, CustomStringConvertible, Codable {
        case cleanEffects = "CLEAN_EFFECTS"
        case hearingImpaired = "HEARING_IMPAIRED"
        case undefined = "UNDEFINED"
        case visualImpairedCommentary = "VISUAL_IMPAIRED_COMMENTARY"
        public var description: String { return self.rawValue }
    }

    public enum AuthenticationScheme: String, CustomStringConvertible, Codable {
        case akamai = "AKAMAI"
        case common = "COMMON"
        public var description: String { return self.rawValue }
    }

    public enum AvailBlankingState: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum BlackoutSlateNetworkEndBlackout: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum BlackoutSlateState: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum BurnInAlignment: String, CustomStringConvertible, Codable {
        case centered = "CENTERED"
        case left = "LEFT"
        case smart = "SMART"
        public var description: String { return self.rawValue }
    }

    public enum BurnInBackgroundColor: String, CustomStringConvertible, Codable {
        case black = "BLACK"
        case none = "NONE"
        case white = "WHITE"
        public var description: String { return self.rawValue }
    }

    public enum BurnInFontColor: String, CustomStringConvertible, Codable {
        case black = "BLACK"
        case blue = "BLUE"
        case green = "GREEN"
        case red = "RED"
        case white = "WHITE"
        case yellow = "YELLOW"
        public var description: String { return self.rawValue }
    }

    public enum BurnInOutlineColor: String, CustomStringConvertible, Codable {
        case black = "BLACK"
        case blue = "BLUE"
        case green = "GREEN"
        case red = "RED"
        case white = "WHITE"
        case yellow = "YELLOW"
        public var description: String { return self.rawValue }
    }

    public enum BurnInShadowColor: String, CustomStringConvertible, Codable {
        case black = "BLACK"
        case none = "NONE"
        case white = "WHITE"
        public var description: String { return self.rawValue }
    }

    public enum BurnInTeletextGridControl: String, CustomStringConvertible, Codable {
        case fixed = "FIXED"
        case scaled = "SCALED"
        public var description: String { return self.rawValue }
    }

    public enum CdiInputResolution: String, CustomStringConvertible, Codable {
        case fhd = "FHD"
        case hd = "HD"
        case sd = "SD"
        case uhd = "UHD"
        public var description: String { return self.rawValue }
    }

    public enum ChannelClass: String, CustomStringConvertible, Codable {
        case singlePipeline = "SINGLE_PIPELINE"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum ChannelState: String, CustomStringConvertible, Codable {
        case createFailed = "CREATE_FAILED"
        case creating = "CREATING"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case idle = "IDLE"
        case recovering = "RECOVERING"
        case running = "RUNNING"
        case starting = "STARTING"
        case stopping = "STOPPING"
        case updateFailed = "UPDATE_FAILED"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum ContentType: String, CustomStringConvertible, Codable {
        case imageJpeg = "image/jpeg"
        public var description: String { return self.rawValue }
    }

    public enum DeviceSettingsSyncState: String, CustomStringConvertible, Codable {
        case synced = "SYNCED"
        case syncing = "SYNCING"
        public var description: String { return self.rawValue }
    }

    public enum DeviceUpdateStatus: String, CustomStringConvertible, Codable {
        case notUpToDate = "NOT_UP_TO_DATE"
        case upToDate = "UP_TO_DATE"
        public var description: String { return self.rawValue }
    }

    public enum DvbSdtOutputSdt: String, CustomStringConvertible, Codable {
        case sdtFollow = "SDT_FOLLOW"
        case sdtFollowIfPresent = "SDT_FOLLOW_IF_PRESENT"
        case sdtManual = "SDT_MANUAL"
        case sdtNone = "SDT_NONE"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationAlignment: String, CustomStringConvertible, Codable {
        case centered = "CENTERED"
        case left = "LEFT"
        case smart = "SMART"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationBackgroundColor: String, CustomStringConvertible, Codable {
        case black = "BLACK"
        case none = "NONE"
        case white = "WHITE"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationFontColor: String, CustomStringConvertible, Codable {
        case black = "BLACK"
        case blue = "BLUE"
        case green = "GREEN"
        case red = "RED"
        case white = "WHITE"
        case yellow = "YELLOW"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationOutlineColor: String, CustomStringConvertible, Codable {
        case black = "BLACK"
        case blue = "BLUE"
        case green = "GREEN"
        case red = "RED"
        case white = "WHITE"
        case yellow = "YELLOW"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationShadowColor: String, CustomStringConvertible, Codable {
        case black = "BLACK"
        case none = "NONE"
        case white = "WHITE"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationTeletextGridControl: String, CustomStringConvertible, Codable {
        case fixed = "FIXED"
        case scaled = "SCALED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3AttenuationControl: String, CustomStringConvertible, Codable {
        case attenuate3Db = "ATTENUATE_3_DB"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum Eac3BitstreamMode: String, CustomStringConvertible, Codable {
        case commentary = "COMMENTARY"
        case completeMain = "COMPLETE_MAIN"
        case emergency = "EMERGENCY"
        case hearingImpaired = "HEARING_IMPAIRED"
        case visuallyImpaired = "VISUALLY_IMPAIRED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3CodingMode: String, CustomStringConvertible, Codable {
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode20 = "CODING_MODE_2_0"
        case codingMode32 = "CODING_MODE_3_2"
        public var description: String { return self.rawValue }
    }

    public enum Eac3DcFilter: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3DrcLine: String, CustomStringConvertible, Codable {
        case filmLight = "FILM_LIGHT"
        case filmStandard = "FILM_STANDARD"
        case musicLight = "MUSIC_LIGHT"
        case musicStandard = "MUSIC_STANDARD"
        case none = "NONE"
        case speech = "SPEECH"
        public var description: String { return self.rawValue }
    }

    public enum Eac3DrcRf: String, CustomStringConvertible, Codable {
        case filmLight = "FILM_LIGHT"
        case filmStandard = "FILM_STANDARD"
        case musicLight = "MUSIC_LIGHT"
        case musicStandard = "MUSIC_STANDARD"
        case none = "NONE"
        case speech = "SPEECH"
        public var description: String { return self.rawValue }
    }

    public enum Eac3LfeControl: String, CustomStringConvertible, Codable {
        case lfe = "LFE"
        case noLfe = "NO_LFE"
        public var description: String { return self.rawValue }
    }

    public enum Eac3LfeFilter: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3MetadataControl: String, CustomStringConvertible, Codable {
        case followInput = "FOLLOW_INPUT"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3PassthroughControl: String, CustomStringConvertible, Codable {
        case noPassthrough = "NO_PASSTHROUGH"
        case whenPossible = "WHEN_POSSIBLE"
        public var description: String { return self.rawValue }
    }

    public enum Eac3PhaseControl: String, CustomStringConvertible, Codable {
        case noShift = "NO_SHIFT"
        case shift90Degrees = "SHIFT_90_DEGREES"
        public var description: String { return self.rawValue }
    }

    public enum Eac3StereoDownmix: String, CustomStringConvertible, Codable {
        case dpl2 = "DPL2"
        case loRo = "LO_RO"
        case ltRt = "LT_RT"
        case notIndicated = "NOT_INDICATED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3SurroundExMode: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        case notIndicated = "NOT_INDICATED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3SurroundMode: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        case notIndicated = "NOT_INDICATED"
        public var description: String { return self.rawValue }
    }

    public enum EbuTtDDestinationStyleControl: String, CustomStringConvertible, Codable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum EbuTtDFillLineGapControl: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum EmbeddedConvert608To708: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case upconvert = "UPCONVERT"
        public var description: String { return self.rawValue }
    }

    public enum EmbeddedScte20Detection: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case off = "OFF"
        public var description: String { return self.rawValue }
    }

    public enum FeatureActivationsInputPrepareScheduleActions: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum FecOutputIncludeFec: String, CustomStringConvertible, Codable {
        case column = "COLUMN"
        case columnAndRow = "COLUMN_AND_ROW"
        public var description: String { return self.rawValue }
    }

    public enum FixedAfd: String, CustomStringConvertible, Codable {
        case afd0000 = "AFD_0000"
        case afd0010 = "AFD_0010"
        case afd0011 = "AFD_0011"
        case afd0100 = "AFD_0100"
        case afd1000 = "AFD_1000"
        case afd1001 = "AFD_1001"
        case afd1010 = "AFD_1010"
        case afd1011 = "AFD_1011"
        case afd1101 = "AFD_1101"
        case afd1110 = "AFD_1110"
        case afd1111 = "AFD_1111"
        public var description: String { return self.rawValue }
    }

    public enum Fmp4NielsenId3Behavior: String, CustomStringConvertible, Codable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum Fmp4TimedMetadataBehavior: String, CustomStringConvertible, Codable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum FollowPoint: String, CustomStringConvertible, Codable {
        case end = "END"
        case start = "START"
        public var description: String { return self.rawValue }
    }

    public enum FrameCaptureIntervalUnit: String, CustomStringConvertible, Codable {
        case milliseconds = "MILLISECONDS"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum GlobalConfigurationInputEndAction: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case switchAndLoopInputs = "SWITCH_AND_LOOP_INPUTS"
        public var description: String { return self.rawValue }
    }

    public enum GlobalConfigurationLowFramerateInputs: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum GlobalConfigurationOutputLockingMode: String, CustomStringConvertible, Codable {
        case epochLocking = "EPOCH_LOCKING"
        case pipelineLocking = "PIPELINE_LOCKING"
        public var description: String { return self.rawValue }
    }

    public enum GlobalConfigurationOutputTimingSource: String, CustomStringConvertible, Codable {
        case inputClock = "INPUT_CLOCK"
        case systemClock = "SYSTEM_CLOCK"
        public var description: String { return self.rawValue }
    }

    public enum H264AdaptiveQuantization: String, CustomStringConvertible, Codable {
        case high = "HIGH"
        case higher = "HIGHER"
        case low = "LOW"
        case max = "MAX"
        case medium = "MEDIUM"
        case off = "OFF"
        public var description: String { return self.rawValue }
    }

    public enum H264ColorMetadata: String, CustomStringConvertible, Codable {
        case ignore = "IGNORE"
        case insert = "INSERT"
        public var description: String { return self.rawValue }
    }

    public enum H264EntropyEncoding: String, CustomStringConvertible, Codable {
        case cabac = "CABAC"
        case cavlc = "CAVLC"
        public var description: String { return self.rawValue }
    }

    public enum H264FlickerAq: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264ForceFieldPictures: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264FramerateControl: String, CustomStringConvertible, Codable {
        case initializeFromSource = "INITIALIZE_FROM_SOURCE"
        case specified = "SPECIFIED"
        public var description: String { return self.rawValue }
    }

    public enum H264GopBReference: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264GopSizeUnits: String, CustomStringConvertible, Codable {
        case frames = "FRAMES"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum H264Level: String, CustomStringConvertible, Codable {
        case h264Level1 = "H264_LEVEL_1"
        case h264Level11 = "H264_LEVEL_1_1"
        case h264Level12 = "H264_LEVEL_1_2"
        case h264Level13 = "H264_LEVEL_1_3"
        case h264Level2 = "H264_LEVEL_2"
        case h264Level21 = "H264_LEVEL_2_1"
        case h264Level22 = "H264_LEVEL_2_2"
        case h264Level3 = "H264_LEVEL_3"
        case h264Level31 = "H264_LEVEL_3_1"
        case h264Level32 = "H264_LEVEL_3_2"
        case h264Level4 = "H264_LEVEL_4"
        case h264Level41 = "H264_LEVEL_4_1"
        case h264Level42 = "H264_LEVEL_4_2"
        case h264Level5 = "H264_LEVEL_5"
        case h264Level51 = "H264_LEVEL_5_1"
        case h264Level52 = "H264_LEVEL_5_2"
        case h264LevelAuto = "H264_LEVEL_AUTO"
        public var description: String { return self.rawValue }
    }

    public enum H264LookAheadRateControl: String, CustomStringConvertible, Codable {
        case high = "HIGH"
        case low = "LOW"
        case medium = "MEDIUM"
        public var description: String { return self.rawValue }
    }

    public enum H264ParControl: String, CustomStringConvertible, Codable {
        case initializeFromSource = "INITIALIZE_FROM_SOURCE"
        case specified = "SPECIFIED"
        public var description: String { return self.rawValue }
    }

    public enum H264Profile: String, CustomStringConvertible, Codable {
        case baseline = "BASELINE"
        case high = "HIGH"
        case high10Bit = "HIGH_10BIT"
        case high422 = "HIGH_422"
        case high42210Bit = "HIGH_422_10BIT"
        case main = "MAIN"
        public var description: String { return self.rawValue }
    }

    public enum H264QualityLevel: String, CustomStringConvertible, Codable {
        case enhancedQuality = "ENHANCED_QUALITY"
        case standardQuality = "STANDARD_QUALITY"
        public var description: String { return self.rawValue }
    }

    public enum H264RateControlMode: String, CustomStringConvertible, Codable {
        case cbr = "CBR"
        case multiplex = "MULTIPLEX"
        case qvbr = "QVBR"
        case vbr = "VBR"
        public var description: String { return self.rawValue }
    }

    public enum H264ScanType: String, CustomStringConvertible, Codable {
        case interlaced = "INTERLACED"
        case progressive = "PROGRESSIVE"
        public var description: String { return self.rawValue }
    }

    public enum H264SceneChangeDetect: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264SpatialAq: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264SubGopLength: String, CustomStringConvertible, Codable {
        case dynamic = "DYNAMIC"
        case fixed = "FIXED"
        public var description: String { return self.rawValue }
    }

    public enum H264Syntax: String, CustomStringConvertible, Codable {
        case `default` = "DEFAULT"
        case rp2027 = "RP2027"
        public var description: String { return self.rawValue }
    }

    public enum H264TemporalAq: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264TimecodeInsertionBehavior: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case picTimingSei = "PIC_TIMING_SEI"
        public var description: String { return self.rawValue }
    }

    public enum H265AdaptiveQuantization: String, CustomStringConvertible, Codable {
        case high = "HIGH"
        case higher = "HIGHER"
        case low = "LOW"
        case max = "MAX"
        case medium = "MEDIUM"
        case off = "OFF"
        public var description: String { return self.rawValue }
    }

    public enum H265AlternativeTransferFunction: String, CustomStringConvertible, Codable {
        case insert = "INSERT"
        case omit = "OMIT"
        public var description: String { return self.rawValue }
    }

    public enum H265ColorMetadata: String, CustomStringConvertible, Codable {
        case ignore = "IGNORE"
        case insert = "INSERT"
        public var description: String { return self.rawValue }
    }

    public enum H265FlickerAq: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H265GopSizeUnits: String, CustomStringConvertible, Codable {
        case frames = "FRAMES"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum H265Level: String, CustomStringConvertible, Codable {
        case h265Level1 = "H265_LEVEL_1"
        case h265Level2 = "H265_LEVEL_2"
        case h265Level21 = "H265_LEVEL_2_1"
        case h265Level3 = "H265_LEVEL_3"
        case h265Level31 = "H265_LEVEL_3_1"
        case h265Level4 = "H265_LEVEL_4"
        case h265Level41 = "H265_LEVEL_4_1"
        case h265Level5 = "H265_LEVEL_5"
        case h265Level51 = "H265_LEVEL_5_1"
        case h265Level52 = "H265_LEVEL_5_2"
        case h265Level6 = "H265_LEVEL_6"
        case h265Level61 = "H265_LEVEL_6_1"
        case h265Level62 = "H265_LEVEL_6_2"
        case h265LevelAuto = "H265_LEVEL_AUTO"
        public var description: String { return self.rawValue }
    }

    public enum H265LookAheadRateControl: String, CustomStringConvertible, Codable {
        case high = "HIGH"
        case low = "LOW"
        case medium = "MEDIUM"
        public var description: String { return self.rawValue }
    }

    public enum H265Profile: String, CustomStringConvertible, Codable {
        case main = "MAIN"
        case main10Bit = "MAIN_10BIT"
        public var description: String { return self.rawValue }
    }

    public enum H265RateControlMode: String, CustomStringConvertible, Codable {
        case cbr = "CBR"
        case multiplex = "MULTIPLEX"
        case qvbr = "QVBR"
        public var description: String { return self.rawValue }
    }

    public enum H265ScanType: String, CustomStringConvertible, Codable {
        case interlaced = "INTERLACED"
        case progressive = "PROGRESSIVE"
        public var description: String { return self.rawValue }
    }

    public enum H265SceneChangeDetect: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H265Tier: String, CustomStringConvertible, Codable {
        case high = "HIGH"
        case main = "MAIN"
        public var description: String { return self.rawValue }
    }

    public enum H265TimecodeInsertionBehavior: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case picTimingSei = "PIC_TIMING_SEI"
        public var description: String { return self.rawValue }
    }

    public enum HlsAdMarkers: String, CustomStringConvertible, Codable {
        case adobe = "ADOBE"
        case elemental = "ELEMENTAL"
        case elementalScte35 = "ELEMENTAL_SCTE35"
        public var description: String { return self.rawValue }
    }

    public enum HlsAkamaiHttpTransferMode: String, CustomStringConvertible, Codable {
        case chunked = "CHUNKED"
        case nonChunked = "NON_CHUNKED"
        public var description: String { return self.rawValue }
    }

    public enum HlsCaptionLanguageSetting: String, CustomStringConvertible, Codable {
        case insert = "INSERT"
        case none = "NONE"
        case omit = "OMIT"
        public var description: String { return self.rawValue }
    }

    public enum HlsClientCache: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum HlsCodecSpecification: String, CustomStringConvertible, Codable {
        case rfc4281 = "RFC_4281"
        case rfc6381 = "RFC_6381"
        public var description: String { return self.rawValue }
    }

    public enum HlsDirectoryStructure: String, CustomStringConvertible, Codable {
        case singleDirectory = "SINGLE_DIRECTORY"
        case subdirectoryPerStream = "SUBDIRECTORY_PER_STREAM"
        public var description: String { return self.rawValue }
    }

    public enum HlsDiscontinuityTags: String, CustomStringConvertible, Codable {
        case insert = "INSERT"
        case neverInsert = "NEVER_INSERT"
        public var description: String { return self.rawValue }
    }

    public enum HlsEncryptionType: String, CustomStringConvertible, Codable {
        case aes128 = "AES128"
        case sampleAes = "SAMPLE_AES"
        public var description: String { return self.rawValue }
    }

    public enum HlsH265PackagingType: String, CustomStringConvertible, Codable {
        case hev1 = "HEV1"
        case hvc1 = "HVC1"
        public var description: String { return self.rawValue }
    }

    public enum HlsId3SegmentTaggingState: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum HlsIncompleteSegmentBehavior: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case suppress = "SUPPRESS"
        public var description: String { return self.rawValue }
    }

    public enum HlsIvInManifest: String, CustomStringConvertible, Codable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum HlsIvSource: String, CustomStringConvertible, Codable {
        case explicit = "EXPLICIT"
        case followsSegmentNumber = "FOLLOWS_SEGMENT_NUMBER"
        public var description: String { return self.rawValue }
    }

    public enum HlsManifestCompression: String, CustomStringConvertible, Codable {
        case gzip = "GZIP"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum HlsManifestDurationFormat: String, CustomStringConvertible, Codable {
        case floatingPoint = "FLOATING_POINT"
        case integer = "INTEGER"
        public var description: String { return self.rawValue }
    }

    public enum HlsMediaStoreStorageClass: String, CustomStringConvertible, Codable {
        case temporal = "TEMPORAL"
        public var description: String { return self.rawValue }
    }

    public enum HlsMode: String, CustomStringConvertible, Codable {
        case live = "LIVE"
        case vod = "VOD"
        public var description: String { return self.rawValue }
    }

    public enum HlsOutputSelection: String, CustomStringConvertible, Codable {
        case manifestsAndSegments = "MANIFESTS_AND_SEGMENTS"
        case segmentsOnly = "SEGMENTS_ONLY"
        case variantManifestsAndSegments = "VARIANT_MANIFESTS_AND_SEGMENTS"
        public var description: String { return self.rawValue }
    }

    public enum HlsProgramDateTime: String, CustomStringConvertible, Codable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum HlsRedundantManifest: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum HlsSegmentationMode: String, CustomStringConvertible, Codable {
        case useInputSegmentation = "USE_INPUT_SEGMENTATION"
        case useSegmentDuration = "USE_SEGMENT_DURATION"
        public var description: String { return self.rawValue }
    }

    public enum HlsStreamInfResolution: String, CustomStringConvertible, Codable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum HlsTimedMetadataId3Frame: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case priv = "PRIV"
        case tdrl = "TDRL"
        public var description: String { return self.rawValue }
    }

    public enum HlsTsFileMode: String, CustomStringConvertible, Codable {
        case segmentedFiles = "SEGMENTED_FILES"
        case singleFile = "SINGLE_FILE"
        public var description: String { return self.rawValue }
    }

    public enum HlsWebdavHttpTransferMode: String, CustomStringConvertible, Codable {
        case chunked = "CHUNKED"
        case nonChunked = "NON_CHUNKED"
        public var description: String { return self.rawValue }
    }

    public enum IFrameOnlyPlaylistType: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum InputClass: String, CustomStringConvertible, Codable {
        case singlePipeline = "SINGLE_PIPELINE"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum InputCodec: String, CustomStringConvertible, Codable {
        case avc = "AVC"
        case hevc = "HEVC"
        case mpeg2 = "MPEG2"
        public var description: String { return self.rawValue }
    }

    public enum InputDeblockFilter: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum InputDenoiseFilter: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceActiveInput: String, CustomStringConvertible, Codable {
        case hdmi = "HDMI"
        case sdi = "SDI"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceConfiguredInput: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case hdmi = "HDMI"
        case sdi = "SDI"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceConnectionState: String, CustomStringConvertible, Codable {
        case connected = "CONNECTED"
        case disconnected = "DISCONNECTED"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceIpScheme: String, CustomStringConvertible, Codable {
        case dhcp = "DHCP"
        case `static` = "STATIC"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceScanType: String, CustomStringConvertible, Codable {
        case interlaced = "INTERLACED"
        case progressive = "PROGRESSIVE"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceState: String, CustomStringConvertible, Codable {
        case idle = "IDLE"
        case streaming = "STREAMING"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceTransferType: String, CustomStringConvertible, Codable {
        case incoming = "INCOMING"
        case outgoing = "OUTGOING"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceType: String, CustomStringConvertible, Codable {
        case hd = "HD"
        public var description: String { return self.rawValue }
    }

    public enum InputFilter: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case disabled = "DISABLED"
        case forced = "FORCED"
        public var description: String { return self.rawValue }
    }

    public enum InputLossActionForHlsOut: String, CustomStringConvertible, Codable {
        case emitOutput = "EMIT_OUTPUT"
        case pauseOutput = "PAUSE_OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum InputLossActionForMsSmoothOut: String, CustomStringConvertible, Codable {
        case emitOutput = "EMIT_OUTPUT"
        case pauseOutput = "PAUSE_OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum InputLossActionForRtmpOut: String, CustomStringConvertible, Codable {
        case emitOutput = "EMIT_OUTPUT"
        case pauseOutput = "PAUSE_OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum InputLossActionForUdpOut: String, CustomStringConvertible, Codable {
        case dropProgram = "DROP_PROGRAM"
        case dropTs = "DROP_TS"
        case emitProgram = "EMIT_PROGRAM"
        public var description: String { return self.rawValue }
    }

    public enum InputLossImageType: String, CustomStringConvertible, Codable {
        case color = "COLOR"
        case slate = "SLATE"
        public var description: String { return self.rawValue }
    }

    public enum InputMaximumBitrate: String, CustomStringConvertible, Codable {
        case max10Mbps = "MAX_10_MBPS"
        case max20Mbps = "MAX_20_MBPS"
        case max50Mbps = "MAX_50_MBPS"
        public var description: String { return self.rawValue }
    }

    public enum InputPreference: String, CustomStringConvertible, Codable {
        case equalInputPreference = "EQUAL_INPUT_PREFERENCE"
        case primaryInputPreferred = "PRIMARY_INPUT_PREFERRED"
        public var description: String { return self.rawValue }
    }

    public enum InputResolution: String, CustomStringConvertible, Codable {
        case hd = "HD"
        case sd = "SD"
        case uhd = "UHD"
        public var description: String { return self.rawValue }
    }

    public enum InputSecurityGroupState: String, CustomStringConvertible, Codable {
        case deleted = "DELETED"
        case idle = "IDLE"
        case inUse = "IN_USE"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum InputSourceEndBehavior: String, CustomStringConvertible, Codable {
        case `continue` = "CONTINUE"
        case loop = "LOOP"
        public var description: String { return self.rawValue }
    }

    public enum InputSourceType: String, CustomStringConvertible, Codable {
        case dynamic = "DYNAMIC"
        case `static` = "STATIC"
        public var description: String { return self.rawValue }
    }

    public enum InputState: String, CustomStringConvertible, Codable {
        case attached = "ATTACHED"
        case creating = "CREATING"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case detached = "DETACHED"
        public var description: String { return self.rawValue }
    }

    public enum InputTimecodeSource: String, CustomStringConvertible, Codable {
        case embedded = "EMBEDDED"
        case zerobased = "ZEROBASED"
        public var description: String { return self.rawValue }
    }

    public enum InputType: String, CustomStringConvertible, Codable {
        case awsCdi = "AWS_CDI"
        case inputDevice = "INPUT_DEVICE"
        case mediaconnect = "MEDIACONNECT"
        case mp4File = "MP4_FILE"
        case rtmpPull = "RTMP_PULL"
        case rtmpPush = "RTMP_PUSH"
        case rtpPush = "RTP_PUSH"
        case udpPush = "UDP_PUSH"
        case urlPull = "URL_PULL"
        public var description: String { return self.rawValue }
    }

    public enum LastFrameClippingBehavior: String, CustomStringConvertible, Codable {
        case excludeLastFrame = "EXCLUDE_LAST_FRAME"
        case includeLastFrame = "INCLUDE_LAST_FRAME"
        public var description: String { return self.rawValue }
    }

    public enum LogLevel: String, CustomStringConvertible, Codable {
        case debug = "DEBUG"
        case disabled = "DISABLED"
        case error = "ERROR"
        case info = "INFO"
        case warning = "WARNING"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAbsentInputAudioBehavior: String, CustomStringConvertible, Codable {
        case drop = "DROP"
        case encodeSilence = "ENCODE_SILENCE"
        public var description: String { return self.rawValue }
    }

    public enum M2tsArib: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAribCaptionsPidControl: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAudioBufferModel: String, CustomStringConvertible, Codable {
        case atsc = "ATSC"
        case dvb = "DVB"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAudioInterval: String, CustomStringConvertible, Codable {
        case videoAndFixedIntervals = "VIDEO_AND_FIXED_INTERVALS"
        case videoInterval = "VIDEO_INTERVAL"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAudioStreamType: String, CustomStringConvertible, Codable {
        case atsc = "ATSC"
        case dvb = "DVB"
        public var description: String { return self.rawValue }
    }

    public enum M2tsBufferModel: String, CustomStringConvertible, Codable {
        case multiplex = "MULTIPLEX"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum M2tsCcDescriptor: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum M2tsEbifControl: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M2tsEbpPlacement: String, CustomStringConvertible, Codable {
        case videoAndAudioPids = "VIDEO_AND_AUDIO_PIDS"
        case videoPid = "VIDEO_PID"
        public var description: String { return self.rawValue }
    }

    public enum M2tsEsRateInPes: String, CustomStringConvertible, Codable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum M2tsKlv: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M2tsNielsenId3Behavior: String, CustomStringConvertible, Codable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M2tsPcrControl: String, CustomStringConvertible, Codable {
        case configuredPcrPeriod = "CONFIGURED_PCR_PERIOD"
        case pcrEveryPesPacket = "PCR_EVERY_PES_PACKET"
        public var description: String { return self.rawValue }
    }

    public enum M2tsRateMode: String, CustomStringConvertible, Codable {
        case cbr = "CBR"
        case vbr = "VBR"
        public var description: String { return self.rawValue }
    }

    public enum M2tsScte35Control: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M2tsSegmentationMarkers: String, CustomStringConvertible, Codable {
        case ebp = "EBP"
        case ebpLegacy = "EBP_LEGACY"
        case none = "NONE"
        case psiSegstart = "PSI_SEGSTART"
        case raiAdapt = "RAI_ADAPT"
        case raiSegstart = "RAI_SEGSTART"
        public var description: String { return self.rawValue }
    }

    public enum M2tsSegmentationStyle: String, CustomStringConvertible, Codable {
        case maintainCadence = "MAINTAIN_CADENCE"
        case resetCadence = "RESET_CADENCE"
        public var description: String { return self.rawValue }
    }

    public enum M2tsTimedMetadataBehavior: String, CustomStringConvertible, Codable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M3u8NielsenId3Behavior: String, CustomStringConvertible, Codable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M3u8PcrControl: String, CustomStringConvertible, Codable {
        case configuredPcrPeriod = "CONFIGURED_PCR_PERIOD"
        case pcrEveryPesPacket = "PCR_EVERY_PES_PACKET"
        public var description: String { return self.rawValue }
    }

    public enum M3u8Scte35Behavior: String, CustomStringConvertible, Codable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M3u8TimedMetadataBehavior: String, CustomStringConvertible, Codable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum Mp2CodingMode: String, CustomStringConvertible, Codable {
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode20 = "CODING_MODE_2_0"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2AdaptiveQuantization: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case high = "HIGH"
        case low = "LOW"
        case medium = "MEDIUM"
        case off = "OFF"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2ColorMetadata: String, CustomStringConvertible, Codable {
        case ignore = "IGNORE"
        case insert = "INSERT"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2ColorSpace: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2DisplayRatio: String, CustomStringConvertible, Codable {
        case displayratio16x9 = "DISPLAYRATIO16X9"
        case displayratio4x3 = "DISPLAYRATIO4X3"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2GopSizeUnits: String, CustomStringConvertible, Codable {
        case frames = "FRAMES"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2ScanType: String, CustomStringConvertible, Codable {
        case interlaced = "INTERLACED"
        case progressive = "PROGRESSIVE"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2SubGopLength: String, CustomStringConvertible, Codable {
        case dynamic = "DYNAMIC"
        case fixed = "FIXED"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2TimecodeInsertionBehavior: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case gopTimecode = "GOP_TIMECODE"
        public var description: String { return self.rawValue }
    }

    public enum MsSmoothH265PackagingType: String, CustomStringConvertible, Codable {
        case hev1 = "HEV1"
        case hvc1 = "HVC1"
        public var description: String { return self.rawValue }
    }

    public enum MultiplexState: String, CustomStringConvertible, Codable {
        case createFailed = "CREATE_FAILED"
        case creating = "CREATING"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case idle = "IDLE"
        case recovering = "RECOVERING"
        case running = "RUNNING"
        case starting = "STARTING"
        case stopping = "STOPPING"
        public var description: String { return self.rawValue }
    }

    public enum NetworkInputServerValidation: String, CustomStringConvertible, Codable {
        case checkCryptographyAndValidateName = "CHECK_CRYPTOGRAPHY_AND_VALIDATE_NAME"
        case checkCryptographyOnly = "CHECK_CRYPTOGRAPHY_ONLY"
        public var description: String { return self.rawValue }
    }

    public enum NielsenPcmToId3TaggingState: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum OfferingDurationUnits: String, CustomStringConvertible, Codable {
        case months = "MONTHS"
        public var description: String { return self.rawValue }
    }

    public enum OfferingType: String, CustomStringConvertible, Codable {
        case noUpfront = "NO_UPFRONT"
        public var description: String { return self.rawValue }
    }

    public enum PipelineId: String, CustomStringConvertible, Codable {
        case pipeline0 = "PIPELINE_0"
        case pipeline1 = "PIPELINE_1"
        public var description: String { return self.rawValue }
    }

    public enum PreferredChannelPipeline: String, CustomStringConvertible, Codable {
        case currentlyActive = "CURRENTLY_ACTIVE"
        case pipeline0 = "PIPELINE_0"
        case pipeline1 = "PIPELINE_1"
        public var description: String { return self.rawValue }
    }

    public enum ReservationCodec: String, CustomStringConvertible, Codable {
        case audio = "AUDIO"
        case avc = "AVC"
        case hevc = "HEVC"
        case link = "LINK"
        case mpeg2 = "MPEG2"
        public var description: String { return self.rawValue }
    }

    public enum ReservationMaximumBitrate: String, CustomStringConvertible, Codable {
        case max10Mbps = "MAX_10_MBPS"
        case max20Mbps = "MAX_20_MBPS"
        case max50Mbps = "MAX_50_MBPS"
        public var description: String { return self.rawValue }
    }

    public enum ReservationMaximumFramerate: String, CustomStringConvertible, Codable {
        case max30Fps = "MAX_30_FPS"
        case max60Fps = "MAX_60_FPS"
        public var description: String { return self.rawValue }
    }

    public enum ReservationResolution: String, CustomStringConvertible, Codable {
        case fhd = "FHD"
        case hd = "HD"
        case sd = "SD"
        case uhd = "UHD"
        public var description: String { return self.rawValue }
    }

    public enum ReservationResourceType: String, CustomStringConvertible, Codable {
        case channel = "CHANNEL"
        case input = "INPUT"
        case multiplex = "MULTIPLEX"
        case output = "OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum ReservationSpecialFeature: String, CustomStringConvertible, Codable {
        case advancedAudio = "ADVANCED_AUDIO"
        case audioNormalization = "AUDIO_NORMALIZATION"
        public var description: String { return self.rawValue }
    }

    public enum ReservationState: String, CustomStringConvertible, Codable {
        case active = "ACTIVE"
        case canceled = "CANCELED"
        case deleted = "DELETED"
        case expired = "EXPIRED"
        public var description: String { return self.rawValue }
    }

    public enum ReservationVideoQuality: String, CustomStringConvertible, Codable {
        case enhanced = "ENHANCED"
        case premium = "PREMIUM"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum RtmpAdMarkers: String, CustomStringConvertible, Codable {
        case onCuePointScte35 = "ON_CUE_POINT_SCTE35"
        public var description: String { return self.rawValue }
    }

    public enum RtmpCacheFullBehavior: String, CustomStringConvertible, Codable {
        case disconnectImmediately = "DISCONNECT_IMMEDIATELY"
        case waitForServer = "WAIT_FOR_SERVER"
        public var description: String { return self.rawValue }
    }

    public enum RtmpCaptionData: String, CustomStringConvertible, Codable {
        case all = "ALL"
        case field1608 = "FIELD1_608"
        case field1AndField2608 = "FIELD1_AND_FIELD2_608"
        public var description: String { return self.rawValue }
    }

    public enum RtmpOutputCertificateMode: String, CustomStringConvertible, Codable {
        case selfSigned = "SELF_SIGNED"
        case verifyAuthenticity = "VERIFY_AUTHENTICITY"
        public var description: String { return self.rawValue }
    }

    public enum Scte20Convert608To708: String, CustomStringConvertible, Codable {
        case disabled = "DISABLED"
        case upconvert = "UPCONVERT"
        public var description: String { return self.rawValue }
    }

    public enum Scte35AposNoRegionalBlackoutBehavior: String, CustomStringConvertible, Codable {
        case follow = "FOLLOW"
        case ignore = "IGNORE"
        public var description: String { return self.rawValue }
    }

    public enum Scte35AposWebDeliveryAllowedBehavior: String, CustomStringConvertible, Codable {
        case follow = "FOLLOW"
        case ignore = "IGNORE"
        public var description: String { return self.rawValue }
    }

    public enum Scte35ArchiveAllowedFlag: String, CustomStringConvertible, Codable {
        case archiveAllowed = "ARCHIVE_ALLOWED"
        case archiveNotAllowed = "ARCHIVE_NOT_ALLOWED"
        public var description: String { return self.rawValue }
    }

    public enum Scte35DeviceRestrictions: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case restrictGroup0 = "RESTRICT_GROUP0"
        case restrictGroup1 = "RESTRICT_GROUP1"
        case restrictGroup2 = "RESTRICT_GROUP2"
        public var description: String { return self.rawValue }
    }

    public enum Scte35NoRegionalBlackoutFlag: String, CustomStringConvertible, Codable {
        case noRegionalBlackout = "NO_REGIONAL_BLACKOUT"
        case regionalBlackout = "REGIONAL_BLACKOUT"
        public var description: String { return self.rawValue }
    }

    public enum Scte35SegmentationCancelIndicator: String, CustomStringConvertible, Codable {
        case segmentationEventCanceled = "SEGMENTATION_EVENT_CANCELED"
        case segmentationEventNotCanceled = "SEGMENTATION_EVENT_NOT_CANCELED"
        public var description: String { return self.rawValue }
    }

    public enum Scte35SpliceInsertNoRegionalBlackoutBehavior: String, CustomStringConvertible, Codable {
        case follow = "FOLLOW"
        case ignore = "IGNORE"
        public var description: String { return self.rawValue }
    }

    public enum Scte35SpliceInsertWebDeliveryAllowedBehavior: String, CustomStringConvertible, Codable {
        case follow = "FOLLOW"
        case ignore = "IGNORE"
        public var description: String { return self.rawValue }
    }

    public enum Scte35WebDeliveryAllowedFlag: String, CustomStringConvertible, Codable {
        case webDeliveryAllowed = "WEB_DELIVERY_ALLOWED"
        case webDeliveryNotAllowed = "WEB_DELIVERY_NOT_ALLOWED"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupAudioOnlyTimecodeControl: String, CustomStringConvertible, Codable {
        case passthrough = "PASSTHROUGH"
        case useConfiguredClock = "USE_CONFIGURED_CLOCK"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupCertificateMode: String, CustomStringConvertible, Codable {
        case selfSigned = "SELF_SIGNED"
        case verifyAuthenticity = "VERIFY_AUTHENTICITY"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupEventIdMode: String, CustomStringConvertible, Codable {
        case noEventId = "NO_EVENT_ID"
        case useConfigured = "USE_CONFIGURED"
        case useTimestamp = "USE_TIMESTAMP"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupEventStopBehavior: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case sendEos = "SEND_EOS"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupSegmentationMode: String, CustomStringConvertible, Codable {
        case useInputSegmentation = "USE_INPUT_SEGMENTATION"
        case useSegmentDuration = "USE_SEGMENT_DURATION"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupSparseTrackType: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case scte35 = "SCTE_35"
        case scte35WithoutSegmentation = "SCTE_35_WITHOUT_SEGMENTATION"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupStreamManifestBehavior: String, CustomStringConvertible, Codable {
        case doNotSend = "DO_NOT_SEND"
        case send = "SEND"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupTimestampOffsetMode: String, CustomStringConvertible, Codable {
        case useConfiguredOffset = "USE_CONFIGURED_OFFSET"
        case useEventStartDate = "USE_EVENT_START_DATE"
        public var description: String { return self.rawValue }
    }

    public enum Smpte2038DataPreference: String, CustomStringConvertible, Codable {
        case ignore = "IGNORE"
        case prefer = "PREFER"
        public var description: String { return self.rawValue }
    }

    public enum TemporalFilterPostFilterSharpening: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum TemporalFilterStrength: String, CustomStringConvertible, Codable {
        case auto = "AUTO"
        case strength1 = "STRENGTH_1"
        case strength10 = "STRENGTH_10"
        case strength11 = "STRENGTH_11"
        case strength12 = "STRENGTH_12"
        case strength13 = "STRENGTH_13"
        case strength14 = "STRENGTH_14"
        case strength15 = "STRENGTH_15"
        case strength16 = "STRENGTH_16"
        case strength2 = "STRENGTH_2"
        case strength3 = "STRENGTH_3"
        case strength4 = "STRENGTH_4"
        case strength5 = "STRENGTH_5"
        case strength6 = "STRENGTH_6"
        case strength7 = "STRENGTH_7"
        case strength8 = "STRENGTH_8"
        case strength9 = "STRENGTH_9"
        public var description: String { return self.rawValue }
    }

    public enum TimecodeConfigSource: String, CustomStringConvertible, Codable {
        case embedded = "EMBEDDED"
        case systemclock = "SYSTEMCLOCK"
        case zerobased = "ZEROBASED"
        public var description: String { return self.rawValue }
    }

    public enum TtmlDestinationStyleControl: String, CustomStringConvertible, Codable {
        case passthrough = "PASSTHROUGH"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum UdpTimedMetadataId3Frame: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case priv = "PRIV"
        case tdrl = "TDRL"
        public var description: String { return self.rawValue }
    }

    public enum VideoDescriptionRespondToAfd: String, CustomStringConvertible, Codable {
        case none = "NONE"
        case passthrough = "PASSTHROUGH"
        case respond = "RESPOND"
        public var description: String { return self.rawValue }
    }

    public enum VideoDescriptionScalingBehavior: String, CustomStringConvertible, Codable {
        case `default` = "DEFAULT"
        case stretchToOutput = "STRETCH_TO_OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum VideoSelectorColorSpace: String, CustomStringConvertible, Codable {
        case follow = "FOLLOW"
        case rec601 = "REC_601"
        case rec709 = "REC_709"
        public var description: String { return self.rawValue }
    }

    public enum VideoSelectorColorSpaceUsage: String, CustomStringConvertible, Codable {
        case fallback = "FALLBACK"
        case force = "FORCE"
        public var description: String { return self.rawValue }
    }

    public enum WavCodingMode: String, CustomStringConvertible, Codable {
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode20 = "CODING_MODE_2_0"
        case codingMode40 = "CODING_MODE_4_0"
        case codingMode80 = "CODING_MODE_8_0"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct AacSettings: AWSEncodableShape & AWSDecodableShape {
        /// Average bitrate in bits/second. Valid values depend on rate control mode and profile.
        public let bitrate: Double?
        /// Mono, Stereo, or 5.1 channel layout. Valid values depend on rate control mode and profile. The adReceiverMix setting receives a stereo description plus control track and emits a mono AAC encode of the description track, with control data emitted in the PES header as per ETSI TS 101 154 Annex E.
        public let codingMode: AacCodingMode?
        /// Set to "broadcasterMixedAd" when input contains pre-mixed main audio + AD (narration) as a stereo pair.  The Audio Type field (audioType) will be set to 3, which signals to downstream systems that this stream contains "broadcaster mixed AD". Note that the input received by the encoder must contain pre-mixed audio; the encoder does not perform the mixing. The values in audioTypeControl and audioType (in AudioDescription) are ignored when set to broadcasterMixedAd.
        /// Leave set to "normal" when input does not contain pre-mixed audio + AD.
        public let inputType: AacInputType?
        /// AAC Profile.
        public let profile: AacProfile?
        /// Rate Control Mode.
        public let rateControlMode: AacRateControlMode?
        /// Sets LATM / LOAS AAC output for raw containers.
        public let rawFormat: AacRawFormat?
        /// Sample rate in Hz. Valid values depend on rate control mode and profile.
        public let sampleRate: Double?
        /// Use MPEG-2 AAC audio instead of MPEG-4 AAC audio for raw or MPEG-2 Transport Stream containers.
        public let spec: AacSpec?
        /// VBR Quality Level - Only used if rateControlMode is VBR.
        public let vbrQuality: AacVbrQuality?

        public init(bitrate: Double? = nil, codingMode: AacCodingMode? = nil, inputType: AacInputType? = nil, profile: AacProfile? = nil, rateControlMode: AacRateControlMode? = nil, rawFormat: AacRawFormat? = nil, sampleRate: Double? = nil, spec: AacSpec? = nil, vbrQuality: AacVbrQuality? = nil) {
            self.bitrate = bitrate
            self.codingMode = codingMode
            self.inputType = inputType
            self.profile = profile
            self.rateControlMode = rateControlMode
            self.rawFormat = rawFormat
            self.sampleRate = sampleRate
            self.spec = spec
            self.vbrQuality = vbrQuality
        }

        private enum CodingKeys: String, CodingKey {
            case bitrate
            case codingMode
            case inputType
            case profile
            case rateControlMode
            case rawFormat
            case sampleRate
            case spec
            case vbrQuality
        }
    }

    public struct Ac3Settings: AWSEncodableShape & AWSDecodableShape {
        /// Average bitrate in bits/second. Valid bitrates depend on the coding mode.
        public let bitrate: Double?
        /// Specifies the bitstream mode (bsmod) for the emitted AC-3 stream. See ATSC A/52-2012 for background on these values.
        public let bitstreamMode: Ac3BitstreamMode?
        /// Dolby Digital coding mode. Determines number of channels.
        public let codingMode: Ac3CodingMode?
        /// Sets the dialnorm for the output. If excluded and input audio is Dolby Digital, dialnorm will be passed through.
        public let dialnorm: Int?
        /// If set to filmStandard, adds dynamic range compression signaling to the output bitstream as defined in the Dolby Digital specification.
        public let drcProfile: Ac3DrcProfile?
        /// When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding. Only valid in codingMode32Lfe mode.
        public let lfeFilter: Ac3LfeFilter?
        /// When set to "followInput", encoder metadata will be sourced from the DD, DD+, or DolbyE decoder that supplied this audio data. If audio was not supplied from one of these streams, then the static metadata settings will be used.
        public let metadataControl: Ac3MetadataControl?

        public init(bitrate: Double? = nil, bitstreamMode: Ac3BitstreamMode? = nil, codingMode: Ac3CodingMode? = nil, dialnorm: Int? = nil, drcProfile: Ac3DrcProfile? = nil, lfeFilter: Ac3LfeFilter? = nil, metadataControl: Ac3MetadataControl? = nil) {
            self.bitrate = bitrate
            self.bitstreamMode = bitstreamMode
            self.codingMode = codingMode
            self.dialnorm = dialnorm
            self.drcProfile = drcProfile
            self.lfeFilter = lfeFilter
            self.metadataControl = metadataControl
        }

        public func validate(name: String) throws {
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, max: 31)
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case bitrate
            case bitstreamMode
            case codingMode
            case dialnorm
            case drcProfile
            case lfeFilter
            case metadataControl
        }
    }

    public struct AcceptInputDeviceTransferRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputDeviceId", location: .uri(locationName: "inputDeviceId"))
        ]

        public let inputDeviceId: String

        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct AcceptInputDeviceTransferResponse: AWSDecodableShape {
        public init() {}
    }

    public struct AncillarySourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the number (1 to 4) of the captions channel you want to extract from the ancillary captions. If you plan to convert the ancillary captions to another format, complete this field. If you plan to choose Embedded as the captions destination in the output (to pass through all the channels in the ancillary captions), leave this field blank because MediaLive ignores the field.
        public let sourceAncillaryChannelNumber: Int?

        public init(sourceAncillaryChannelNumber: Int? = nil) {
            self.sourceAncillaryChannelNumber = sourceAncillaryChannelNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.sourceAncillaryChannelNumber, name: "sourceAncillaryChannelNumber", parent: name, max: 4)
            try self.validate(self.sourceAncillaryChannelNumber, name: "sourceAncillaryChannelNumber", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case sourceAncillaryChannelNumber
        }
    }

    public struct ArchiveContainerSettings: AWSEncodableShape & AWSDecodableShape {
        public let m2tsSettings: M2tsSettings?
        public let rawSettings: RawSettings?

        public init(m2tsSettings: M2tsSettings? = nil, rawSettings: RawSettings? = nil) {
            self.m2tsSettings = m2tsSettings
            self.rawSettings = rawSettings
        }

        public func validate(name: String) throws {
            try self.m2tsSettings?.validate(name: "\(name).m2tsSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case m2tsSettings
            case rawSettings
        }
    }

    public struct ArchiveGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// A directory and base filename where archive files should be written.
        public let destination: OutputLocationRef
        /// Number of seconds to write to archive file before closing and starting a new one.
        public let rolloverInterval: Int?

        public init(destination: OutputLocationRef, rolloverInterval: Int? = nil) {
            self.destination = destination
            self.rolloverInterval = rolloverInterval
        }

        public func validate(name: String) throws {
            try self.validate(self.rolloverInterval, name: "rolloverInterval", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case destination
            case rolloverInterval
        }
    }

    public struct ArchiveOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Settings specific to the container type of the file.
        public let containerSettings: ArchiveContainerSettings
        /// Output file extension. If excluded, this will be auto-selected from the container type.
        public let `extension`: String?
        /// String concatenated to the end of the destination filename.  Required for multiple outputs of the same type.
        public let nameModifier: String?

        public init(containerSettings: ArchiveContainerSettings, extension: String? = nil, nameModifier: String? = nil) {
            self.containerSettings = containerSettings
            self.`extension` = `extension`
            self.nameModifier = nameModifier
        }

        public func validate(name: String) throws {
            try self.containerSettings.validate(name: "\(name).containerSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case containerSettings
            case `extension`
            case nameModifier
        }
    }

    public struct AribDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct AribSourceSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct AudioChannelMapping: AWSEncodableShape & AWSDecodableShape {
        /// Indices and gain values for each input channel that should be remixed into this output channel.
        public let inputChannelLevels: [InputChannelLevel]
        /// The index of the output channel being produced.
        public let outputChannel: Int

        public init(inputChannelLevels: [InputChannelLevel], outputChannel: Int) {
            self.inputChannelLevels = inputChannelLevels
            self.outputChannel = outputChannel
        }

        public func validate(name: String) throws {
            try self.inputChannelLevels.forEach {
                try $0.validate(name: "\(name).inputChannelLevels[]")
            }
            try self.validate(self.outputChannel, name: "outputChannel", parent: name, max: 7)
            try self.validate(self.outputChannel, name: "outputChannel", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case inputChannelLevels
            case outputChannel
        }
    }

    public struct AudioCodecSettings: AWSEncodableShape & AWSDecodableShape {
        public let aacSettings: AacSettings?
        public let ac3Settings: Ac3Settings?
        public let eac3Settings: Eac3Settings?
        public let mp2Settings: Mp2Settings?
        public let passThroughSettings: PassThroughSettings?
        public let wavSettings: WavSettings?

        public init(aacSettings: AacSettings? = nil, ac3Settings: Ac3Settings? = nil, eac3Settings: Eac3Settings? = nil, mp2Settings: Mp2Settings? = nil, passThroughSettings: PassThroughSettings? = nil, wavSettings: WavSettings? = nil) {
            self.aacSettings = aacSettings
            self.ac3Settings = ac3Settings
            self.eac3Settings = eac3Settings
            self.mp2Settings = mp2Settings
            self.passThroughSettings = passThroughSettings
            self.wavSettings = wavSettings
        }

        public func validate(name: String) throws {
            try self.ac3Settings?.validate(name: "\(name).ac3Settings")
            try self.eac3Settings?.validate(name: "\(name).eac3Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case aacSettings
            case ac3Settings
            case eac3Settings
            case mp2Settings
            case passThroughSettings
            case wavSettings
        }
    }

    public struct AudioDescription: AWSEncodableShape & AWSDecodableShape {
        /// Advanced audio normalization settings.
        public let audioNormalizationSettings: AudioNormalizationSettings?
        /// The name of the AudioSelector used as the source for this AudioDescription.
        public let audioSelectorName: String
        /// Applies only if audioTypeControl is useConfigured. The values for audioType are defined in ISO-IEC 13818-1.
        public let audioType: AudioType?
        /// Determines how audio type is determined.
        ///   followInput: If the input contains an ISO 639 audioType, then that value is passed through to the output. If the input contains no ISO 639 audioType, the value in Audio Type is included in the output.
        ///   useConfigured: The value in Audio Type is included in the output.
        /// Note that this field and audioType are both ignored if inputType is broadcasterMixedAd.
        public let audioTypeControl: AudioDescriptionAudioTypeControl?
        /// Audio codec settings.
        public let codecSettings: AudioCodecSettings?
        /// RFC 5646 language code representing the language of the audio output track. Only used if languageControlMode is useConfigured, or there is no ISO 639 language code specified in the input.
        public let languageCode: String?
        /// Choosing followInput will cause the ISO 639 language code of the output to follow the ISO 639 language code of the input. The languageCode will be used when useConfigured is set, or when followInput is selected but there is no ISO 639 language code specified by the input.
        public let languageCodeControl: AudioDescriptionLanguageCodeControl?
        /// The name of this AudioDescription. Outputs will use this name to uniquely identify this AudioDescription.  Description names should be unique within this Live Event.
        public let name: String
        /// Settings that control how input audio channels are remixed into the output audio channels.
        public let remixSettings: RemixSettings?
        /// Used for MS Smooth and Apple HLS outputs. Indicates the name displayed by the player (eg. English, or Director Commentary).
        public let streamName: String?

        public init(audioNormalizationSettings: AudioNormalizationSettings? = nil, audioSelectorName: String, audioType: AudioType? = nil, audioTypeControl: AudioDescriptionAudioTypeControl? = nil, codecSettings: AudioCodecSettings? = nil, languageCode: String? = nil, languageCodeControl: AudioDescriptionLanguageCodeControl? = nil, name: String, remixSettings: RemixSettings? = nil, streamName: String? = nil) {
            self.audioNormalizationSettings = audioNormalizationSettings
            self.audioSelectorName = audioSelectorName
            self.audioType = audioType
            self.audioTypeControl = audioTypeControl
            self.codecSettings = codecSettings
            self.languageCode = languageCode
            self.languageCodeControl = languageCodeControl
            self.name = name
            self.remixSettings = remixSettings
            self.streamName = streamName
        }

        public func validate(name: String) throws {
            try self.codecSettings?.validate(name: "\(name).codecSettings")
            try self.validate(self.languageCode, name: "languageCode", parent: name, max: 35)
            try self.validate(self.languageCode, name: "languageCode", parent: name, min: 1)
            try self.remixSettings?.validate(name: "\(name).remixSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioNormalizationSettings
            case audioSelectorName
            case audioType
            case audioTypeControl
            case codecSettings
            case languageCode
            case languageCodeControl
            case name
            case remixSettings
            case streamName
        }
    }

    public struct AudioLanguageSelection: AWSEncodableShape & AWSDecodableShape {
        /// Selects a specific three-letter language code from within an audio source.
        public let languageCode: String
        /// When set to "strict", the transport stream demux strictly identifies audio streams by their language descriptor. If a PMT update occurs such that an audio stream matching the initially selected language is no longer present then mute will be encoded until the language returns. If "loose", then on a PMT update the demux will choose another audio stream in the program with the same stream type if it can't find one with the same language.
        public let languageSelectionPolicy: AudioLanguageSelectionPolicy?

        public init(languageCode: String, languageSelectionPolicy: AudioLanguageSelectionPolicy? = nil) {
            self.languageCode = languageCode
            self.languageSelectionPolicy = languageSelectionPolicy
        }

        private enum CodingKeys: String, CodingKey {
            case languageCode
            case languageSelectionPolicy
        }
    }

    public struct AudioNormalizationSettings: AWSEncodableShape & AWSDecodableShape {
        /// Audio normalization algorithm to use. itu17701 conforms to the CALM Act specification, itu17702 conforms to the EBU R-128 specification.
        public let algorithm: AudioNormalizationAlgorithm?
        /// When set to correctAudio the output audio is corrected using the chosen algorithm. If set to measureOnly, the audio will be measured but not adjusted.
        public let algorithmControl: AudioNormalizationAlgorithmControl?
        /// Target LKFS(loudness) to adjust volume to. If no value is entered, a default value will be used according to the chosen algorithm.  The CALM Act (1770-1) recommends a target of -24 LKFS. The EBU R-128 specification (1770-2) recommends a target of -23 LKFS.
        public let targetLkfs: Double?

        public init(algorithm: AudioNormalizationAlgorithm? = nil, algorithmControl: AudioNormalizationAlgorithmControl? = nil, targetLkfs: Double? = nil) {
            self.algorithm = algorithm
            self.algorithmControl = algorithmControl
            self.targetLkfs = targetLkfs
        }

        private enum CodingKeys: String, CodingKey {
            case algorithm
            case algorithmControl
            case targetLkfs
        }
    }

    public struct AudioOnlyHlsSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the group to which the audio Rendition belongs.
        public let audioGroupId: String?
        /// Optional. Specifies the .jpg or .png image to use as the cover art for an audio-only output. We recommend a low bit-size file because the image increases the output audio bandwidth.
        /// The image is attached to the audio as an ID3 tag, frame type APIC, picture type 0x10, as per the "ID3 tag version 2.4.0 - Native Frames" standard.
        public let audioOnlyImage: InputLocation?
        /// Four types of audio-only tracks are supported:
        /// Audio-Only Variant Stream
        /// The client can play back this audio-only stream instead of video in low-bandwidth scenarios. Represented as an EXT-X-STREAM-INF in the HLS manifest.
        /// Alternate Audio, Auto Select, Default
        /// Alternate rendition that the client should try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=YES, AUTOSELECT=YES
        /// Alternate Audio, Auto Select, Not Default
        /// Alternate rendition that the client may try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=YES
        /// Alternate Audio, not Auto Select
        /// Alternate rendition that the client will not try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=NO
        public let audioTrackType: AudioOnlyHlsTrackType?
        /// Specifies the segment type.
        public let segmentType: AudioOnlyHlsSegmentType?

        public init(audioGroupId: String? = nil, audioOnlyImage: InputLocation? = nil, audioTrackType: AudioOnlyHlsTrackType? = nil, segmentType: AudioOnlyHlsSegmentType? = nil) {
            self.audioGroupId = audioGroupId
            self.audioOnlyImage = audioOnlyImage
            self.audioTrackType = audioTrackType
            self.segmentType = segmentType
        }

        private enum CodingKeys: String, CodingKey {
            case audioGroupId
            case audioOnlyImage
            case audioTrackType
            case segmentType
        }
    }

    public struct AudioPidSelection: AWSEncodableShape & AWSDecodableShape {
        /// Selects a specific PID from within a source.
        public let pid: Int

        public init(pid: Int) {
            self.pid = pid
        }

        public func validate(name: String) throws {
            try self.validate(self.pid, name: "pid", parent: name, max: 8191)
            try self.validate(self.pid, name: "pid", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case pid
        }
    }

    public struct AudioSelector: AWSEncodableShape & AWSDecodableShape {
        /// The name of this AudioSelector. AudioDescriptions will use this name to uniquely identify this Selector.  Selector names should be unique per input.
        public let name: String
        /// The audio selector settings.
        public let selectorSettings: AudioSelectorSettings?

        public init(name: String, selectorSettings: AudioSelectorSettings? = nil) {
            self.name = name
            self.selectorSettings = selectorSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.selectorSettings?.validate(name: "\(name).selectorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case name
            case selectorSettings
        }
    }

    public struct AudioSelectorSettings: AWSEncodableShape & AWSDecodableShape {
        public let audioLanguageSelection: AudioLanguageSelection?
        public let audioPidSelection: AudioPidSelection?
        public let audioTrackSelection: AudioTrackSelection?

        public init(audioLanguageSelection: AudioLanguageSelection? = nil, audioPidSelection: AudioPidSelection? = nil, audioTrackSelection: AudioTrackSelection? = nil) {
            self.audioLanguageSelection = audioLanguageSelection
            self.audioPidSelection = audioPidSelection
            self.audioTrackSelection = audioTrackSelection
        }

        public func validate(name: String) throws {
            try self.audioPidSelection?.validate(name: "\(name).audioPidSelection")
            try self.audioTrackSelection?.validate(name: "\(name).audioTrackSelection")
        }

        private enum CodingKeys: String, CodingKey {
            case audioLanguageSelection
            case audioPidSelection
            case audioTrackSelection
        }
    }

    public struct AudioSilenceFailoverSettings: AWSEncodableShape & AWSDecodableShape {
        /// The name of the audio selector in the input that MediaLive should monitor to detect silence. Select your most important rendition. If you didn't create an audio selector in this input, leave blank.
        public let audioSelectorName: String
        /// The amount of time (in milliseconds) that the active input must be silent before automatic input failover occurs. Silence is defined as audio loss or audio quieter than -50 dBFS.
        public let audioSilenceThresholdMsec: Int?

        public init(audioSelectorName: String, audioSilenceThresholdMsec: Int? = nil) {
            self.audioSelectorName = audioSelectorName
            self.audioSilenceThresholdMsec = audioSilenceThresholdMsec
        }

        public func validate(name: String) throws {
            try self.validate(self.audioSilenceThresholdMsec, name: "audioSilenceThresholdMsec", parent: name, min: 1000)
        }

        private enum CodingKeys: String, CodingKey {
            case audioSelectorName
            case audioSilenceThresholdMsec
        }
    }

    public struct AudioTrack: AWSEncodableShape & AWSDecodableShape {
        /// 1-based integer value that maps to a specific audio track
        public let track: Int

        public init(track: Int) {
            self.track = track
        }

        public func validate(name: String) throws {
            try self.validate(self.track, name: "track", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case track
        }
    }

    public struct AudioTrackSelection: AWSEncodableShape & AWSDecodableShape {
        /// Selects one or more unique audio tracks from within a source.
        public let tracks: [AudioTrack]

        public init(tracks: [AudioTrack]) {
            self.tracks = tracks
        }

        public func validate(name: String) throws {
            try self.tracks.forEach {
                try $0.validate(name: "\(name).tracks[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case tracks
        }
    }

    public struct AutomaticInputFailoverSettings: AWSEncodableShape & AWSDecodableShape {
        /// This clear time defines the requirement a recovered input must meet to be considered healthy. The input must have no failover conditions for this length of time. Enter a time in milliseconds. This value is particularly important if the input_preference for the failover pair is set to PRIMARY_INPUT_PREFERRED, because after this time, MediaLive will switch back to the primary input.
        public let errorClearTimeMsec: Int?
        /// A list of failover conditions. If any of these conditions occur, MediaLive will perform a failover to the other input.
        public let failoverConditions: [FailoverCondition]?
        /// Input preference when deciding which input to make active when a previously failed input has recovered.
        public let inputPreference: InputPreference?
        /// The input ID of the secondary input in the automatic input failover pair.
        public let secondaryInputId: String

        public init(errorClearTimeMsec: Int? = nil, failoverConditions: [FailoverCondition]? = nil, inputPreference: InputPreference? = nil, secondaryInputId: String) {
            self.errorClearTimeMsec = errorClearTimeMsec
            self.failoverConditions = failoverConditions
            self.inputPreference = inputPreference
            self.secondaryInputId = secondaryInputId
        }

        public func validate(name: String) throws {
            try self.validate(self.errorClearTimeMsec, name: "errorClearTimeMsec", parent: name, min: 1)
            try self.failoverConditions?.forEach {
                try $0.validate(name: "\(name).failoverConditions[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case errorClearTimeMsec
            case failoverConditions
            case inputPreference
            case secondaryInputId
        }
    }

    public struct AvailBlanking: AWSEncodableShape & AWSDecodableShape {
        /// Blanking image to be used. Leave empty for solid black. Only bmp and png images are supported.
        public let availBlankingImage: InputLocation?
        /// When set to enabled, causes video, audio and captions to be blanked when insertion metadata is added.
        public let state: AvailBlankingState?

        public init(availBlankingImage: InputLocation? = nil, state: AvailBlankingState? = nil) {
            self.availBlankingImage = availBlankingImage
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case availBlankingImage
            case state
        }
    }

    public struct AvailConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Ad avail settings.
        public let availSettings: AvailSettings?

        public init(availSettings: AvailSettings? = nil) {
            self.availSettings = availSettings
        }

        public func validate(name: String) throws {
            try self.availSettings?.validate(name: "\(name).availSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case availSettings
        }
    }

    public struct AvailSettings: AWSEncodableShape & AWSDecodableShape {
        public let scte35SpliceInsert: Scte35SpliceInsert?
        public let scte35TimeSignalApos: Scte35TimeSignalApos?

        public init(scte35SpliceInsert: Scte35SpliceInsert? = nil, scte35TimeSignalApos: Scte35TimeSignalApos? = nil) {
            self.scte35SpliceInsert = scte35SpliceInsert
            self.scte35TimeSignalApos = scte35TimeSignalApos
        }

        public func validate(name: String) throws {
            try self.scte35SpliceInsert?.validate(name: "\(name).scte35SpliceInsert")
            try self.scte35TimeSignalApos?.validate(name: "\(name).scte35TimeSignalApos")
        }

        private enum CodingKeys: String, CodingKey {
            case scte35SpliceInsert
            case scte35TimeSignalApos
        }
    }

    public struct BatchDeleteRequest: AWSEncodableShape {
        public let channelIds: [String]?
        public let inputIds: [String]?
        public let inputSecurityGroupIds: [String]?
        public let multiplexIds: [String]?

        public init(channelIds: [String]? = nil, inputIds: [String]? = nil, inputSecurityGroupIds: [String]? = nil, multiplexIds: [String]? = nil) {
            self.channelIds = channelIds
            self.inputIds = inputIds
            self.inputSecurityGroupIds = inputSecurityGroupIds
            self.multiplexIds = multiplexIds
        }

        private enum CodingKeys: String, CodingKey {
            case channelIds
            case inputIds
            case inputSecurityGroupIds
            case multiplexIds
        }
    }

    public struct BatchDeleteResponse: AWSDecodableShape {
        public let failed: [BatchFailedResultModel]?
        public let successful: [BatchSuccessfulResultModel]?

        public init(failed: [BatchFailedResultModel]? = nil, successful: [BatchSuccessfulResultModel]? = nil) {
            self.failed = failed
            self.successful = successful
        }

        private enum CodingKeys: String, CodingKey {
            case failed
            case successful
        }
    }

    public struct BatchFailedResultModel: AWSDecodableShape {
        /// ARN of the resource
        public let arn: String?
        /// Error code for the failed operation
        public let code: String?
        /// ID of the resource
        public let id: String?
        /// Error message for the failed operation
        public let message: String?

        public init(arn: String? = nil, code: String? = nil, id: String? = nil, message: String? = nil) {
            self.arn = arn
            self.code = code
            self.id = id
            self.message = message
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case code
            case id
            case message
        }
    }

    public struct BatchScheduleActionCreateRequest: AWSEncodableShape {
        /// A list of schedule actions to create.
        public let scheduleActions: [ScheduleAction]

        public init(scheduleActions: [ScheduleAction]) {
            self.scheduleActions = scheduleActions
        }

        public func validate(name: String) throws {
            try self.scheduleActions.forEach {
                try $0.validate(name: "\(name).scheduleActions[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case scheduleActions
        }
    }

    public struct BatchScheduleActionCreateResult: AWSDecodableShape {
        /// List of actions that have been created in the schedule.
        public let scheduleActions: [ScheduleAction]

        public init(scheduleActions: [ScheduleAction]) {
            self.scheduleActions = scheduleActions
        }

        private enum CodingKeys: String, CodingKey {
            case scheduleActions
        }
    }

    public struct BatchScheduleActionDeleteRequest: AWSEncodableShape {
        /// A list of schedule actions to delete.
        public let actionNames: [String]

        public init(actionNames: [String]) {
            self.actionNames = actionNames
        }

        private enum CodingKeys: String, CodingKey {
            case actionNames
        }
    }

    public struct BatchScheduleActionDeleteResult: AWSDecodableShape {
        /// List of actions that have been deleted from the schedule.
        public let scheduleActions: [ScheduleAction]

        public init(scheduleActions: [ScheduleAction]) {
            self.scheduleActions = scheduleActions
        }

        private enum CodingKeys: String, CodingKey {
            case scheduleActions
        }
    }

    public struct BatchStartRequest: AWSEncodableShape {
        public let channelIds: [String]?
        public let multiplexIds: [String]?

        public init(channelIds: [String]? = nil, multiplexIds: [String]? = nil) {
            self.channelIds = channelIds
            self.multiplexIds = multiplexIds
        }

        private enum CodingKeys: String, CodingKey {
            case channelIds
            case multiplexIds
        }
    }

    public struct BatchStartResponse: AWSDecodableShape {
        public let failed: [BatchFailedResultModel]?
        public let successful: [BatchSuccessfulResultModel]?

        public init(failed: [BatchFailedResultModel]? = nil, successful: [BatchSuccessfulResultModel]? = nil) {
            self.failed = failed
            self.successful = successful
        }

        private enum CodingKeys: String, CodingKey {
            case failed
            case successful
        }
    }

    public struct BatchStopRequest: AWSEncodableShape {
        public let channelIds: [String]?
        public let multiplexIds: [String]?

        public init(channelIds: [String]? = nil, multiplexIds: [String]? = nil) {
            self.channelIds = channelIds
            self.multiplexIds = multiplexIds
        }

        private enum CodingKeys: String, CodingKey {
            case channelIds
            case multiplexIds
        }
    }

    public struct BatchStopResponse: AWSDecodableShape {
        public let failed: [BatchFailedResultModel]?
        public let successful: [BatchSuccessfulResultModel]?

        public init(failed: [BatchFailedResultModel]? = nil, successful: [BatchSuccessfulResultModel]? = nil) {
            self.failed = failed
            self.successful = successful
        }

        private enum CodingKeys: String, CodingKey {
            case failed
            case successful
        }
    }

    public struct BatchSuccessfulResultModel: AWSDecodableShape {
        /// ARN of the resource
        public let arn: String?
        /// ID of the resource
        public let id: String?
        /// Current state of the resource
        public let state: String?

        public init(arn: String? = nil, id: String? = nil, state: String? = nil) {
            self.arn = arn
            self.id = id
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case id
            case state
        }
    }

    public struct BatchUpdateScheduleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelId", location: .uri(locationName: "channelId"))
        ]

        public let channelId: String
        /// Schedule actions to create in the schedule.
        public let creates: BatchScheduleActionCreateRequest?
        /// Schedule actions to delete from the schedule.
        public let deletes: BatchScheduleActionDeleteRequest?

        public init(channelId: String, creates: BatchScheduleActionCreateRequest? = nil, deletes: BatchScheduleActionDeleteRequest? = nil) {
            self.channelId = channelId
            self.creates = creates
            self.deletes = deletes
        }

        public func validate(name: String) throws {
            try self.creates?.validate(name: "\(name).creates")
        }

        private enum CodingKeys: String, CodingKey {
            case creates
            case deletes
        }
    }

    public struct BatchUpdateScheduleResponse: AWSDecodableShape {
        public let creates: BatchScheduleActionCreateResult?
        public let deletes: BatchScheduleActionDeleteResult?

        public init(creates: BatchScheduleActionCreateResult? = nil, deletes: BatchScheduleActionDeleteResult? = nil) {
            self.creates = creates
            self.deletes = deletes
        }

        private enum CodingKeys: String, CodingKey {
            case creates
            case deletes
        }
    }

    public struct BlackoutSlate: AWSEncodableShape & AWSDecodableShape {
        /// Blackout slate image to be used. Leave empty for solid black. Only bmp and png images are supported.
        public let blackoutSlateImage: InputLocation?
        /// Setting to enabled causes the encoder to blackout the video, audio, and captions, and raise the "Network Blackout Image" slate when an SCTE104/35 Network End Segmentation Descriptor is encountered. The blackout will be lifted when the Network Start Segmentation Descriptor is encountered. The Network End and Network Start descriptors must contain a network ID that matches the value entered in "Network ID".
        public let networkEndBlackout: BlackoutSlateNetworkEndBlackout?
        /// Path to local file to use as Network End Blackout image. Image will be scaled to fill the entire output raster.
        public let networkEndBlackoutImage: InputLocation?
        /// Provides Network ID that matches EIDR ID format (e.g., "10.XXXX/XXXX-XXXX-XXXX-XXXX-XXXX-C").
        public let networkId: String?
        /// When set to enabled, causes video, audio and captions to be blanked when indicated by program metadata.
        public let state: BlackoutSlateState?

        public init(blackoutSlateImage: InputLocation? = nil, networkEndBlackout: BlackoutSlateNetworkEndBlackout? = nil, networkEndBlackoutImage: InputLocation? = nil, networkId: String? = nil, state: BlackoutSlateState? = nil) {
            self.blackoutSlateImage = blackoutSlateImage
            self.networkEndBlackout = networkEndBlackout
            self.networkEndBlackoutImage = networkEndBlackoutImage
            self.networkId = networkId
            self.state = state
        }

        public func validate(name: String) throws {
            try self.validate(self.networkId, name: "networkId", parent: name, max: 34)
            try self.validate(self.networkId, name: "networkId", parent: name, min: 34)
        }

        private enum CodingKeys: String, CodingKey {
            case blackoutSlateImage
            case networkEndBlackout
            case networkEndBlackoutImage
            case networkId
            case state
        }
    }

    public struct BurnInDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// If no explicit xPosition or yPosition is provided, setting alignment to centered will place the captions at the bottom center of the output. Similarly, setting a left alignment will align captions to the bottom left of the output. If x and y positions are given in conjunction with the alignment parameter, the font will be justified (either left or centered) relative to those coordinates. Selecting "smart" justification will left-justify live subtitles and center-justify pre-recorded subtitles.  All burn-in and DVB-Sub font settings must match.
        public let alignment: BurnInAlignment?
        /// Specifies the color of the rectangle behind the captions.  All burn-in and DVB-Sub font settings must match.
        public let backgroundColor: BurnInBackgroundColor?
        /// Specifies the opacity of the background rectangle. 255 is opaque; 0 is transparent. Leaving this parameter out is equivalent to setting it to 0 (transparent).  All burn-in and DVB-Sub font settings must match.
        public let backgroundOpacity: Int?
        /// External font file used for caption burn-in. File extension must be 'ttf' or 'tte'.  Although the user can select output fonts for many different types of input captions,  embedded, STL and teletext sources use a strict grid system. Using external fonts with these caption sources could cause unexpected display of proportional fonts.  All burn-in and DVB-Sub font settings must match.
        public let font: InputLocation?
        /// Specifies the color of the burned-in captions.  This option is not valid for source captions that are STL, 608/embedded or teletext.  These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let fontColor: BurnInFontColor?
        /// Specifies the opacity of the burned-in captions. 255 is opaque; 0 is transparent.  All burn-in and DVB-Sub font settings must match.
        public let fontOpacity: Int?
        /// Font resolution in DPI (dots per inch); default is 96 dpi.  All burn-in and DVB-Sub font settings must match.
        public let fontResolution: Int?
        /// When set to 'auto' fontSize will scale depending on the size of the output.  Giving a positive integer will specify the exact font size in points.  All burn-in and DVB-Sub font settings must match.
        public let fontSize: String?
        /// Specifies font outline color. This option is not valid for source captions that are either 608/embedded or teletext. These source settings are already pre-defined by the caption stream. All burn-in and DVB-Sub font settings must match.
        public let outlineColor: BurnInOutlineColor?
        /// Specifies font outline size in pixels. This option is not valid for source captions that are either 608/embedded or teletext. These source settings are already pre-defined by the caption stream. All burn-in and DVB-Sub font settings must match.
        public let outlineSize: Int?
        /// Specifies the color of the shadow cast by the captions.  All burn-in and DVB-Sub font settings must match.
        public let shadowColor: BurnInShadowColor?
        /// Specifies the opacity of the shadow. 255 is opaque; 0 is transparent. Leaving this parameter out is equivalent to setting it to 0 (transparent).  All burn-in and DVB-Sub font settings must match.
        public let shadowOpacity: Int?
        /// Specifies the horizontal offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels to the left.  All burn-in and DVB-Sub font settings must match.
        public let shadowXOffset: Int?
        /// Specifies the vertical offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text.  All burn-in and DVB-Sub font settings must match.
        public let shadowYOffset: Int?
        /// Controls whether a fixed grid size will be used to generate the output subtitles bitmap. Only applicable for Teletext inputs and DVB-Sub/Burn-in outputs.
        public let teletextGridControl: BurnInTeletextGridControl?
        /// Specifies the horizontal position of the caption relative to the left side of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit xPosition is provided, the horizontal caption position will be determined by the alignment parameter.  All burn-in and DVB-Sub font settings must match.
        public let xPosition: Int?
        /// Specifies the vertical position of the caption relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the caption will be positioned towards the bottom of the output.  All burn-in and DVB-Sub font settings must match.
        public let yPosition: Int?

        public init(alignment: BurnInAlignment? = nil, backgroundColor: BurnInBackgroundColor? = nil, backgroundOpacity: Int? = nil, font: InputLocation? = nil, fontColor: BurnInFontColor? = nil, fontOpacity: Int? = nil, fontResolution: Int? = nil, fontSize: String? = nil, outlineColor: BurnInOutlineColor? = nil, outlineSize: Int? = nil, shadowColor: BurnInShadowColor? = nil, shadowOpacity: Int? = nil, shadowXOffset: Int? = nil, shadowYOffset: Int? = nil, teletextGridControl: BurnInTeletextGridControl? = nil, xPosition: Int? = nil, yPosition: Int? = nil) {
            self.alignment = alignment
            self.backgroundColor = backgroundColor
            self.backgroundOpacity = backgroundOpacity
            self.font = font
            self.fontColor = fontColor
            self.fontOpacity = fontOpacity
            self.fontResolution = fontResolution
            self.fontSize = fontSize
            self.outlineColor = outlineColor
            self.outlineSize = outlineSize
            self.shadowColor = shadowColor
            self.shadowOpacity = shadowOpacity
            self.shadowXOffset = shadowXOffset
            self.shadowYOffset = shadowYOffset
            self.teletextGridControl = teletextGridControl
            self.xPosition = xPosition
            self.yPosition = yPosition
        }

        public func validate(name: String) throws {
            try self.validate(self.backgroundOpacity, name: "backgroundOpacity", parent: name, max: 255)
            try self.validate(self.backgroundOpacity, name: "backgroundOpacity", parent: name, min: 0)
            try self.validate(self.fontOpacity, name: "fontOpacity", parent: name, max: 255)
            try self.validate(self.fontOpacity, name: "fontOpacity", parent: name, min: 0)
            try self.validate(self.fontResolution, name: "fontResolution", parent: name, max: 600)
            try self.validate(self.fontResolution, name: "fontResolution", parent: name, min: 96)
            try self.validate(self.outlineSize, name: "outlineSize", parent: name, max: 10)
            try self.validate(self.outlineSize, name: "outlineSize", parent: name, min: 0)
            try self.validate(self.shadowOpacity, name: "shadowOpacity", parent: name, max: 255)
            try self.validate(self.shadowOpacity, name: "shadowOpacity", parent: name, min: 0)
            try self.validate(self.xPosition, name: "xPosition", parent: name, min: 0)
            try self.validate(self.yPosition, name: "yPosition", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case alignment
            case backgroundColor
            case backgroundOpacity
            case font
            case fontColor
            case fontOpacity
            case fontResolution
            case fontSize
            case outlineColor
            case outlineSize
            case shadowColor
            case shadowOpacity
            case shadowXOffset
            case shadowYOffset
            case teletextGridControl
            case xPosition
            case yPosition
        }
    }

    public struct CancelInputDeviceTransferRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputDeviceId", location: .uri(locationName: "inputDeviceId"))
        ]

        public let inputDeviceId: String

        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct CancelInputDeviceTransferResponse: AWSDecodableShape {
        public init() {}
    }

    public struct CaptionDescription: AWSEncodableShape & AWSDecodableShape {
        /// Specifies which input caption selector to use as a caption source when generating output captions. This field should match a captionSelector name.
        public let captionSelectorName: String
        /// Additional settings for captions destination that depend on the destination type.
        public let destinationSettings: CaptionDestinationSettings?
        /// ISO 639-2 three-digit code: http://www.loc.gov/standards/iso639-2/
        public let languageCode: String?
        /// Human readable information to indicate captions available for players (eg. English, or Spanish).
        public let languageDescription: String?
        /// Name of the caption description.  Used to associate a caption description with an output.  Names must be unique within an event.
        public let name: String

        public init(captionSelectorName: String, destinationSettings: CaptionDestinationSettings? = nil, languageCode: String? = nil, languageDescription: String? = nil, name: String) {
            self.captionSelectorName = captionSelectorName
            self.destinationSettings = destinationSettings
            self.languageCode = languageCode
            self.languageDescription = languageDescription
            self.name = name
        }

        public func validate(name: String) throws {
            try self.destinationSettings?.validate(name: "\(name).destinationSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case captionSelectorName
            case destinationSettings
            case languageCode
            case languageDescription
            case name
        }
    }

    public struct CaptionDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public let aribDestinationSettings: AribDestinationSettings?
        public let burnInDestinationSettings: BurnInDestinationSettings?
        public let dvbSubDestinationSettings: DvbSubDestinationSettings?
        public let ebuTtDDestinationSettings: EbuTtDDestinationSettings?
        public let embeddedDestinationSettings: EmbeddedDestinationSettings?
        public let embeddedPlusScte20DestinationSettings: EmbeddedPlusScte20DestinationSettings?
        public let rtmpCaptionInfoDestinationSettings: RtmpCaptionInfoDestinationSettings?
        public let scte20PlusEmbeddedDestinationSettings: Scte20PlusEmbeddedDestinationSettings?
        public let scte27DestinationSettings: Scte27DestinationSettings?
        public let smpteTtDestinationSettings: SmpteTtDestinationSettings?
        public let teletextDestinationSettings: TeletextDestinationSettings?
        public let ttmlDestinationSettings: TtmlDestinationSettings?
        public let webvttDestinationSettings: WebvttDestinationSettings?

        public init(aribDestinationSettings: AribDestinationSettings? = nil, burnInDestinationSettings: BurnInDestinationSettings? = nil, dvbSubDestinationSettings: DvbSubDestinationSettings? = nil, ebuTtDDestinationSettings: EbuTtDDestinationSettings? = nil, embeddedDestinationSettings: EmbeddedDestinationSettings? = nil, embeddedPlusScte20DestinationSettings: EmbeddedPlusScte20DestinationSettings? = nil, rtmpCaptionInfoDestinationSettings: RtmpCaptionInfoDestinationSettings? = nil, scte20PlusEmbeddedDestinationSettings: Scte20PlusEmbeddedDestinationSettings? = nil, scte27DestinationSettings: Scte27DestinationSettings? = nil, smpteTtDestinationSettings: SmpteTtDestinationSettings? = nil, teletextDestinationSettings: TeletextDestinationSettings? = nil, ttmlDestinationSettings: TtmlDestinationSettings? = nil, webvttDestinationSettings: WebvttDestinationSettings? = nil) {
            self.aribDestinationSettings = aribDestinationSettings
            self.burnInDestinationSettings = burnInDestinationSettings
            self.dvbSubDestinationSettings = dvbSubDestinationSettings
            self.ebuTtDDestinationSettings = ebuTtDDestinationSettings
            self.embeddedDestinationSettings = embeddedDestinationSettings
            self.embeddedPlusScte20DestinationSettings = embeddedPlusScte20DestinationSettings
            self.rtmpCaptionInfoDestinationSettings = rtmpCaptionInfoDestinationSettings
            self.scte20PlusEmbeddedDestinationSettings = scte20PlusEmbeddedDestinationSettings
            self.scte27DestinationSettings = scte27DestinationSettings
            self.smpteTtDestinationSettings = smpteTtDestinationSettings
            self.teletextDestinationSettings = teletextDestinationSettings
            self.ttmlDestinationSettings = ttmlDestinationSettings
            self.webvttDestinationSettings = webvttDestinationSettings
        }

        public func validate(name: String) throws {
            try self.burnInDestinationSettings?.validate(name: "\(name).burnInDestinationSettings")
            try self.dvbSubDestinationSettings?.validate(name: "\(name).dvbSubDestinationSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case aribDestinationSettings
            case burnInDestinationSettings
            case dvbSubDestinationSettings
            case ebuTtDDestinationSettings
            case embeddedDestinationSettings
            case embeddedPlusScte20DestinationSettings
            case rtmpCaptionInfoDestinationSettings
            case scte20PlusEmbeddedDestinationSettings
            case scte27DestinationSettings
            case smpteTtDestinationSettings
            case teletextDestinationSettings
            case ttmlDestinationSettings
            case webvttDestinationSettings
        }
    }

    public struct CaptionLanguageMapping: AWSEncodableShape & AWSDecodableShape {
        /// The closed caption channel being described by this CaptionLanguageMapping.  Each channel mapping must have a unique channel number (maximum of 4)
        public let captionChannel: Int
        /// Three character ISO 639-2 language code (see http://www.loc.gov/standards/iso639-2)
        public let languageCode: String
        /// Textual description of language
        public let languageDescription: String

        public init(captionChannel: Int, languageCode: String, languageDescription: String) {
            self.captionChannel = captionChannel
            self.languageCode = languageCode
            self.languageDescription = languageDescription
        }

        public func validate(name: String) throws {
            try self.validate(self.captionChannel, name: "captionChannel", parent: name, max: 4)
            try self.validate(self.captionChannel, name: "captionChannel", parent: name, min: 1)
            try self.validate(self.languageCode, name: "languageCode", parent: name, max: 3)
            try self.validate(self.languageCode, name: "languageCode", parent: name, min: 3)
            try self.validate(self.languageDescription, name: "languageDescription", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case captionChannel
            case languageCode
            case languageDescription
        }
    }

    public struct CaptionSelector: AWSEncodableShape & AWSDecodableShape {
        /// When specified this field indicates the three letter language code of the caption track to extract from the source.
        public let languageCode: String?
        /// Name identifier for a caption selector.  This name is used to associate this caption selector with one or more caption descriptions.  Names must be unique within an event.
        public let name: String
        /// Caption selector settings.
        public let selectorSettings: CaptionSelectorSettings?

        public init(languageCode: String? = nil, name: String, selectorSettings: CaptionSelectorSettings? = nil) {
            self.languageCode = languageCode
            self.name = name
            self.selectorSettings = selectorSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.selectorSettings?.validate(name: "\(name).selectorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case languageCode
            case name
            case selectorSettings
        }
    }

    public struct CaptionSelectorSettings: AWSEncodableShape & AWSDecodableShape {
        public let ancillarySourceSettings: AncillarySourceSettings?
        public let aribSourceSettings: AribSourceSettings?
        public let dvbSubSourceSettings: DvbSubSourceSettings?
        public let embeddedSourceSettings: EmbeddedSourceSettings?
        public let scte20SourceSettings: Scte20SourceSettings?
        public let scte27SourceSettings: Scte27SourceSettings?
        public let teletextSourceSettings: TeletextSourceSettings?

        public init(ancillarySourceSettings: AncillarySourceSettings? = nil, aribSourceSettings: AribSourceSettings? = nil, dvbSubSourceSettings: DvbSubSourceSettings? = nil, embeddedSourceSettings: EmbeddedSourceSettings? = nil, scte20SourceSettings: Scte20SourceSettings? = nil, scte27SourceSettings: Scte27SourceSettings? = nil, teletextSourceSettings: TeletextSourceSettings? = nil) {
            self.ancillarySourceSettings = ancillarySourceSettings
            self.aribSourceSettings = aribSourceSettings
            self.dvbSubSourceSettings = dvbSubSourceSettings
            self.embeddedSourceSettings = embeddedSourceSettings
            self.scte20SourceSettings = scte20SourceSettings
            self.scte27SourceSettings = scte27SourceSettings
            self.teletextSourceSettings = teletextSourceSettings
        }

        public func validate(name: String) throws {
            try self.ancillarySourceSettings?.validate(name: "\(name).ancillarySourceSettings")
            try self.dvbSubSourceSettings?.validate(name: "\(name).dvbSubSourceSettings")
            try self.embeddedSourceSettings?.validate(name: "\(name).embeddedSourceSettings")
            try self.scte20SourceSettings?.validate(name: "\(name).scte20SourceSettings")
            try self.scte27SourceSettings?.validate(name: "\(name).scte27SourceSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case ancillarySourceSettings
            case aribSourceSettings
            case dvbSubSourceSettings
            case embeddedSourceSettings
            case scte20SourceSettings
            case scte27SourceSettings
            case teletextSourceSettings
        }
    }

    public struct CdiInputSpecification: AWSEncodableShape & AWSDecodableShape {
        /// Maximum CDI input resolution
        public let resolution: CdiInputResolution?

        public init(resolution: CdiInputResolution? = nil) {
            self.resolution = resolution
        }

        private enum CodingKeys: String, CodingKey {
            case resolution
        }
    }

    public struct Channel: AWSDecodableShape {
        /// The unique arn of the channel.
        public let arn: String?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// A list of destinations of the channel. For UDP outputs, there is one
        /// destination per output. For other types (HLS, for example), there is
        /// one destination per packager.
        public let destinations: [OutputDestination]?
        /// The endpoints where outgoing connections initiate from
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        /// The unique id of the channel.
        public let id: String?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level being written to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// The name of the channel. (user-mutable)
        public let name: String?
        /// Runtime details for the pipelines of a running channel.
        public let pipelineDetails: [PipelineDetail]?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The Amazon Resource Name (ARN) of the role assumed when running the Channel.
        public let roleArn: String?
        public let state: ChannelState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Settings for VPC output
        public let vpc: VpcOutputSettings?

        public init(arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettings? = nil) {
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case cdiInputSpecification
            case channelClass
            case destinations
            case egressEndpoints
            case encoderSettings
            case id
            case inputAttachments
            case inputSpecification
            case logLevel
            case name
            case pipelineDetails
            case pipelinesRunningCount
            case roleArn
            case state
            case tags
            case vpc
        }
    }

    public struct ChannelEgressEndpoint: AWSDecodableShape {
        /// Public IP of where a channel's output comes from
        public let sourceIp: String?

        public init(sourceIp: String? = nil) {
            self.sourceIp = sourceIp
        }

        private enum CodingKeys: String, CodingKey {
            case sourceIp
        }
    }

    public struct ChannelSummary: AWSDecodableShape {
        /// The unique arn of the channel.
        public let arn: String?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// A list of destinations of the channel. For UDP outputs, there is one
        /// destination per output. For other types (HLS, for example), there is
        /// one destination per packager.
        public let destinations: [OutputDestination]?
        /// The endpoints where outgoing connections initiate from
        public let egressEndpoints: [ChannelEgressEndpoint]?
        /// The unique id of the channel.
        public let id: String?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level being written to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// The name of the channel. (user-mutable)
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The Amazon Resource Name (ARN) of the role assumed when running the Channel.
        public let roleArn: String?
        public let state: ChannelState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Settings for VPC output
        public let vpc: VpcOutputSettings?

        public init(arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettings? = nil) {
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case cdiInputSpecification
            case channelClass
            case destinations
            case egressEndpoints
            case id
            case inputAttachments
            case inputSpecification
            case logLevel
            case name
            case pipelinesRunningCount
            case roleArn
            case state
            case tags
            case vpc
        }
    }

    public struct ColorSpacePassthroughSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct CreateChannelRequest: AWSEncodableShape {
        public let cdiInputSpecification: CdiInputSpecification?
        public let channelClass: ChannelClass?
        public let destinations: [OutputDestination]?
        public let encoderSettings: EncoderSettings?
        public let inputAttachments: [InputAttachment]?
        public let inputSpecification: InputSpecification?
        public let logLevel: LogLevel?
        public let name: String?
        public let requestId: String?
        public let roleArn: String?
        public let tags: [String: String]?
        public let vpc: VpcOutputSettings?

        public init(cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, destinations: [OutputDestination]? = nil, encoderSettings: EncoderSettings? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, name: String? = nil, requestId: String? = CreateChannelRequest.idempotencyToken(), roleArn: String? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettings? = nil) {
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.destinations = destinations
            self.encoderSettings = encoderSettings
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.name = name
            self.requestId = requestId
            self.roleArn = roleArn
            self.tags = tags
            self.vpc = vpc
        }

        public func validate(name: String) throws {
            try self.destinations?.forEach {
                try $0.validate(name: "\(name).destinations[]")
            }
            try self.encoderSettings?.validate(name: "\(name).encoderSettings")
            try self.inputAttachments?.forEach {
                try $0.validate(name: "\(name).inputAttachments[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case cdiInputSpecification
            case channelClass
            case destinations
            case encoderSettings
            case inputAttachments
            case inputSpecification
            case logLevel
            case name
            case requestId
            case roleArn
            case tags
            case vpc
        }
    }

    public struct CreateChannelResponse: AWSDecodableShape {
        public let channel: Channel?

        public init(channel: Channel? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel
        }
    }

    public struct CreateInputRequest: AWSEncodableShape {
        public let destinations: [InputDestinationRequest]?
        public let inputDevices: [InputDeviceSettings]?
        public let inputSecurityGroups: [String]?
        public let mediaConnectFlows: [MediaConnectFlowRequest]?
        public let name: String?
        public let requestId: String?
        public let roleArn: String?
        public let sources: [InputSourceRequest]?
        public let tags: [String: String]?
        public let type: InputType?
        public let vpc: InputVpcRequest?

        public init(destinations: [InputDestinationRequest]? = nil, inputDevices: [InputDeviceSettings]? = nil, inputSecurityGroups: [String]? = nil, mediaConnectFlows: [MediaConnectFlowRequest]? = nil, name: String? = nil, requestId: String? = CreateInputRequest.idempotencyToken(), roleArn: String? = nil, sources: [InputSourceRequest]? = nil, tags: [String: String]? = nil, type: InputType? = nil, vpc: InputVpcRequest? = nil) {
            self.destinations = destinations
            self.inputDevices = inputDevices
            self.inputSecurityGroups = inputSecurityGroups
            self.mediaConnectFlows = mediaConnectFlows
            self.name = name
            self.requestId = requestId
            self.roleArn = roleArn
            self.sources = sources
            self.tags = tags
            self.type = type
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case destinations
            case inputDevices
            case inputSecurityGroups
            case mediaConnectFlows
            case name
            case requestId
            case roleArn
            case sources
            case tags
            case type
            case vpc
        }
    }

    public struct CreateInputResponse: AWSDecodableShape {
        public let input: Input?

        public init(input: Input? = nil) {
            self.input = input
        }

        private enum CodingKeys: String, CodingKey {
            case input
        }
    }

    public struct CreateInputSecurityGroupRequest: AWSEncodableShape {
        public let tags: [String: String]?
        public let whitelistRules: [InputWhitelistRuleCidr]?

        public init(tags: [String: String]? = nil, whitelistRules: [InputWhitelistRuleCidr]? = nil) {
            self.tags = tags
            self.whitelistRules = whitelistRules
        }

        private enum CodingKeys: String, CodingKey {
            case tags
            case whitelistRules
        }
    }

    public struct CreateInputSecurityGroupResponse: AWSDecodableShape {
        public let securityGroup: InputSecurityGroup?

        public init(securityGroup: InputSecurityGroup? = nil) {
            self.securityGroup = securityGroup
        }

        private enum CodingKeys: String, CodingKey {
            case securityGroup
        }
    }

    public struct CreateMultiplexProgramRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId"))
        ]

        public let multiplexId: String
        public let multiplexProgramSettings: MultiplexProgramSettings
        public let programName: String
        public let requestId: String

        public init(multiplexId: String, multiplexProgramSettings: MultiplexProgramSettings, programName: String, requestId: String = CreateMultiplexProgramRequest.idempotencyToken()) {
            self.multiplexId = multiplexId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.programName = programName
            self.requestId = requestId
        }

        public func validate(name: String) throws {
            try self.multiplexProgramSettings.validate(name: "\(name).multiplexProgramSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexProgramSettings
            case programName
            case requestId
        }
    }

    public struct CreateMultiplexProgramResponse: AWSDecodableShape {
        public let multiplexProgram: MultiplexProgram?

        public init(multiplexProgram: MultiplexProgram? = nil) {
            self.multiplexProgram = multiplexProgram
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexProgram
        }
    }

    public struct CreateMultiplexRequest: AWSEncodableShape {
        public let availabilityZones: [String]
        public let multiplexSettings: MultiplexSettings
        public let name: String
        public let requestId: String
        public let tags: [String: String]?

        public init(availabilityZones: [String], multiplexSettings: MultiplexSettings, name: String, requestId: String = CreateMultiplexRequest.idempotencyToken(), tags: [String: String]? = nil) {
            self.availabilityZones = availabilityZones
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.requestId = requestId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.multiplexSettings.validate(name: "\(name).multiplexSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case availabilityZones
            case multiplexSettings
            case name
            case requestId
            case tags
        }
    }

    public struct CreateMultiplexResponse: AWSDecodableShape {
        public let multiplex: Multiplex?

        public init(multiplex: Multiplex? = nil) {
            self.multiplex = multiplex
        }

        private enum CodingKeys: String, CodingKey {
            case multiplex
        }
    }

    public struct CreatePartnerInputRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputId", location: .uri(locationName: "inputId"))
        ]

        public let inputId: String
        public let requestId: String?
        public let tags: [String: String]?

        public init(inputId: String, requestId: String? = CreatePartnerInputRequest.idempotencyToken(), tags: [String: String]? = nil) {
            self.inputId = inputId
            self.requestId = requestId
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case requestId
            case tags
        }
    }

    public struct CreatePartnerInputResponse: AWSDecodableShape {
        public let input: Input?

        public init(input: Input? = nil) {
            self.input = input
        }

        private enum CodingKeys: String, CodingKey {
            case input
        }
    }

    public struct CreateTagsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resource-arn"))
        ]

        public let resourceArn: String
        public let tags: [String: String]?

        public init(resourceArn: String, tags: [String: String]? = nil) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags
        }
    }

    public struct DeleteChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelId", location: .uri(locationName: "channelId"))
        ]

        public let channelId: String

        public init(channelId: String) {
            self.channelId = channelId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelResponse: AWSDecodableShape {
        public let arn: String?
        public let cdiInputSpecification: CdiInputSpecification?
        public let channelClass: ChannelClass?
        public let destinations: [OutputDestination]?
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        public let id: String?
        public let inputAttachments: [InputAttachment]?
        public let inputSpecification: InputSpecification?
        public let logLevel: LogLevel?
        public let name: String?
        public let pipelineDetails: [PipelineDetail]?
        public let pipelinesRunningCount: Int?
        public let roleArn: String?
        public let state: ChannelState?
        public let tags: [String: String]?
        public let vpc: VpcOutputSettings?

        public init(arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettings? = nil) {
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case cdiInputSpecification
            case channelClass
            case destinations
            case egressEndpoints
            case encoderSettings
            case id
            case inputAttachments
            case inputSpecification
            case logLevel
            case name
            case pipelineDetails
            case pipelinesRunningCount
            case roleArn
            case state
            case tags
            case vpc
        }
    }

    public struct DeleteInputRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputId", location: .uri(locationName: "inputId"))
        ]

        public let inputId: String

        public init(inputId: String) {
            self.inputId = inputId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteInputResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteInputSecurityGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputSecurityGroupId", location: .uri(locationName: "inputSecurityGroupId"))
        ]

        public let inputSecurityGroupId: String

        public init(inputSecurityGroupId: String) {
            self.inputSecurityGroupId = inputSecurityGroupId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteInputSecurityGroupResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteMultiplexProgramRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId")),
            AWSMemberEncoding(label: "programName", location: .uri(locationName: "programName"))
        ]

        public let multiplexId: String
        public let programName: String

        public init(multiplexId: String, programName: String) {
            self.multiplexId = multiplexId
            self.programName = programName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteMultiplexProgramResponse: AWSDecodableShape {
        public let channelId: String?
        public let multiplexProgramSettings: MultiplexProgramSettings?
        public let packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap?
        public let pipelineDetails: [MultiplexProgramPipelineDetail]?
        public let programName: String?

        public init(channelId: String? = nil, multiplexProgramSettings: MultiplexProgramSettings? = nil, packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap? = nil, pipelineDetails: [MultiplexProgramPipelineDetail]? = nil, programName: String? = nil) {
            self.channelId = channelId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.packetIdentifiersMap = packetIdentifiersMap
            self.pipelineDetails = pipelineDetails
            self.programName = programName
        }

        private enum CodingKeys: String, CodingKey {
            case channelId
            case multiplexProgramSettings
            case packetIdentifiersMap
            case pipelineDetails
            case programName
        }
    }

    public struct DeleteMultiplexRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId"))
        ]

        public let multiplexId: String

        public init(multiplexId: String) {
            self.multiplexId = multiplexId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteMultiplexResponse: AWSDecodableShape {
        public let arn: String?
        public let availabilityZones: [String]?
        public let destinations: [MultiplexOutputDestination]?
        public let id: String?
        public let multiplexSettings: MultiplexSettings?
        public let name: String?
        public let pipelinesRunningCount: Int?
        public let programCount: Int?
        public let state: MultiplexState?
        public let tags: [String: String]?

        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case availabilityZones
            case destinations
            case id
            case multiplexSettings
            case name
            case pipelinesRunningCount
            case programCount
            case state
            case tags
        }
    }

    public struct DeleteReservationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "reservationId", location: .uri(locationName: "reservationId"))
        ]

        public let reservationId: String

        public init(reservationId: String) {
            self.reservationId = reservationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteReservationResponse: AWSDecodableShape {
        public let arn: String?
        public let count: Int?
        public let currencyCode: String?
        public let duration: Int?
        public let durationUnits: OfferingDurationUnits?
        public let end: String?
        public let fixedPrice: Double?
        public let name: String?
        public let offeringDescription: String?
        public let offeringId: String?
        public let offeringType: OfferingType?
        public let region: String?
        public let reservationId: String?
        public let resourceSpecification: ReservationResourceSpecification?
        public let start: String?
        public let state: ReservationState?
        public let tags: [String: String]?
        public let usagePrice: Double?

        public init(arn: String? = nil, count: Int? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, end: String? = nil, fixedPrice: Double? = nil, name: String? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, reservationId: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, start: String? = nil, state: ReservationState? = nil, tags: [String: String]? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.count = count
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.end = end
            self.fixedPrice = fixedPrice
            self.name = name
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.reservationId = reservationId
            self.resourceSpecification = resourceSpecification
            self.start = start
            self.state = state
            self.tags = tags
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case count
            case currencyCode
            case duration
            case durationUnits
            case end
            case fixedPrice
            case name
            case offeringDescription
            case offeringId
            case offeringType
            case region
            case reservationId
            case resourceSpecification
            case start
            case state
            case tags
            case usagePrice
        }
    }

    public struct DeleteScheduleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelId", location: .uri(locationName: "channelId"))
        ]

        public let channelId: String

        public init(channelId: String) {
            self.channelId = channelId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteScheduleResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteTagsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resource-arn")),
            AWSMemberEncoding(label: "tagKeys", location: .querystring(locationName: "tagKeys"))
        ]

        public let resourceArn: String
        public let tagKeys: [String]

        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelId", location: .uri(locationName: "channelId"))
        ]

        public let channelId: String

        public init(channelId: String) {
            self.channelId = channelId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelResponse: AWSDecodableShape {
        public let arn: String?
        public let cdiInputSpecification: CdiInputSpecification?
        public let channelClass: ChannelClass?
        public let destinations: [OutputDestination]?
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        public let id: String?
        public let inputAttachments: [InputAttachment]?
        public let inputSpecification: InputSpecification?
        public let logLevel: LogLevel?
        public let name: String?
        public let pipelineDetails: [PipelineDetail]?
        public let pipelinesRunningCount: Int?
        public let roleArn: String?
        public let state: ChannelState?
        public let tags: [String: String]?
        public let vpc: VpcOutputSettings?

        public init(arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettings? = nil) {
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case cdiInputSpecification
            case channelClass
            case destinations
            case egressEndpoints
            case encoderSettings
            case id
            case inputAttachments
            case inputSpecification
            case logLevel
            case name
            case pipelineDetails
            case pipelinesRunningCount
            case roleArn
            case state
            case tags
            case vpc
        }
    }

    public struct DescribeInputDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputDeviceId", location: .uri(locationName: "inputDeviceId"))
        ]

        public let inputDeviceId: String

        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeInputDeviceResponse: AWSDecodableShape {
        public let arn: String?
        public let connectionState: InputDeviceConnectionState?
        public let deviceSettingsSyncState: DeviceSettingsSyncState?
        public let deviceUpdateStatus: DeviceUpdateStatus?
        public let hdDeviceSettings: InputDeviceHdSettings?
        public let id: String?
        public let macAddress: String?
        public let name: String?
        public let networkSettings: InputDeviceNetworkSettings?
        public let serialNumber: String?
        public let type: InputDeviceType?
        public let uhdDeviceSettings: InputDeviceUhdSettings?

        public init(arn: String? = nil, connectionState: InputDeviceConnectionState? = nil, deviceSettingsSyncState: DeviceSettingsSyncState? = nil, deviceUpdateStatus: DeviceUpdateStatus? = nil, hdDeviceSettings: InputDeviceHdSettings? = nil, id: String? = nil, macAddress: String? = nil, name: String? = nil, networkSettings: InputDeviceNetworkSettings? = nil, serialNumber: String? = nil, type: InputDeviceType? = nil, uhdDeviceSettings: InputDeviceUhdSettings? = nil) {
            self.arn = arn
            self.connectionState = connectionState
            self.deviceSettingsSyncState = deviceSettingsSyncState
            self.deviceUpdateStatus = deviceUpdateStatus
            self.hdDeviceSettings = hdDeviceSettings
            self.id = id
            self.macAddress = macAddress
            self.name = name
            self.networkSettings = networkSettings
            self.serialNumber = serialNumber
            self.type = type
            self.uhdDeviceSettings = uhdDeviceSettings
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case connectionState
            case deviceSettingsSyncState
            case deviceUpdateStatus
            case hdDeviceSettings
            case id
            case macAddress
            case name
            case networkSettings
            case serialNumber
            case type
            case uhdDeviceSettings
        }
    }

    public struct DescribeInputDeviceThumbnailRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accept", location: .header(locationName: "accept")),
            AWSMemberEncoding(label: "inputDeviceId", location: .uri(locationName: "inputDeviceId"))
        ]

        public let accept: AcceptHeader
        public let inputDeviceId: String

        public init(accept: AcceptHeader, inputDeviceId: String) {
            self.accept = accept
            self.inputDeviceId = inputDeviceId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeInputDeviceThumbnailResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "body"
        public static let _payloadOptions: AWSShapePayloadOptions = [.raw, .allowStreaming]
        public static var _encoding = [
            AWSMemberEncoding(label: "contentLength", location: .header(locationName: "Content-Length")),
            AWSMemberEncoding(label: "contentType", location: .header(locationName: "Content-Type")),
            AWSMemberEncoding(label: "eTag", location: .header(locationName: "ETag")),
            AWSMemberEncoding(label: "lastModified", location: .header(locationName: "Last-Modified"))
        ]

        public let body: AWSPayload?
        public let contentLength: Int64?
        public let contentType: ContentType?
        public let eTag: String?
        @OptionalCustomCoding<HTTPHeaderDateCoder>
        public var lastModified: Date?

        public init(body: AWSPayload? = nil, contentLength: Int64? = nil, contentType: ContentType? = nil, eTag: String? = nil, lastModified: Date? = nil) {
            self.body = body
            self.contentLength = contentLength
            self.contentType = contentType
            self.eTag = eTag
            self.lastModified = lastModified
        }

        private enum CodingKeys: String, CodingKey {
            case body
            case contentLength = "Content-Length"
            case contentType = "Content-Type"
            case eTag = "ETag"
            case lastModified = "Last-Modified"
        }
    }

    public struct DescribeInputRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputId", location: .uri(locationName: "inputId"))
        ]

        public let inputId: String

        public init(inputId: String) {
            self.inputId = inputId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeInputResponse: AWSDecodableShape {
        public let arn: String?
        public let attachedChannels: [String]?
        public let destinations: [InputDestination]?
        public let id: String?
        public let inputClass: InputClass?
        public let inputDevices: [InputDeviceSettings]?
        public let inputPartnerIds: [String]?
        public let inputSourceType: InputSourceType?
        public let mediaConnectFlows: [MediaConnectFlow]?
        public let name: String?
        public let roleArn: String?
        public let securityGroups: [String]?
        public let sources: [InputSource]?
        public let state: InputState?
        public let tags: [String: String]?
        public let type: InputType?

        public init(arn: String? = nil, attachedChannels: [String]? = nil, destinations: [InputDestination]? = nil, id: String? = nil, inputClass: InputClass? = nil, inputDevices: [InputDeviceSettings]? = nil, inputPartnerIds: [String]? = nil, inputSourceType: InputSourceType? = nil, mediaConnectFlows: [MediaConnectFlow]? = nil, name: String? = nil, roleArn: String? = nil, securityGroups: [String]? = nil, sources: [InputSource]? = nil, state: InputState? = nil, tags: [String: String]? = nil, type: InputType? = nil) {
            self.arn = arn
            self.attachedChannels = attachedChannels
            self.destinations = destinations
            self.id = id
            self.inputClass = inputClass
            self.inputDevices = inputDevices
            self.inputPartnerIds = inputPartnerIds
            self.inputSourceType = inputSourceType
            self.mediaConnectFlows = mediaConnectFlows
            self.name = name
            self.roleArn = roleArn
            self.securityGroups = securityGroups
            self.sources = sources
            self.state = state
            self.tags = tags
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case attachedChannels
            case destinations
            case id
            case inputClass
            case inputDevices
            case inputPartnerIds
            case inputSourceType
            case mediaConnectFlows
            case name
            case roleArn
            case securityGroups
            case sources
            case state
            case tags
            case type
        }
    }

    public struct DescribeInputSecurityGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputSecurityGroupId", location: .uri(locationName: "inputSecurityGroupId"))
        ]

        public let inputSecurityGroupId: String

        public init(inputSecurityGroupId: String) {
            self.inputSecurityGroupId = inputSecurityGroupId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeInputSecurityGroupResponse: AWSDecodableShape {
        public let arn: String?
        public let id: String?
        public let inputs: [String]?
        public let state: InputSecurityGroupState?
        public let tags: [String: String]?
        public let whitelistRules: [InputWhitelistRule]?

        public init(arn: String? = nil, id: String? = nil, inputs: [String]? = nil, state: InputSecurityGroupState? = nil, tags: [String: String]? = nil, whitelistRules: [InputWhitelistRule]? = nil) {
            self.arn = arn
            self.id = id
            self.inputs = inputs
            self.state = state
            self.tags = tags
            self.whitelistRules = whitelistRules
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case id
            case inputs
            case state
            case tags
            case whitelistRules
        }
    }

    public struct DescribeMultiplexProgramRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId")),
            AWSMemberEncoding(label: "programName", location: .uri(locationName: "programName"))
        ]

        public let multiplexId: String
        public let programName: String

        public init(multiplexId: String, programName: String) {
            self.multiplexId = multiplexId
            self.programName = programName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeMultiplexProgramResponse: AWSDecodableShape {
        public let channelId: String?
        public let multiplexProgramSettings: MultiplexProgramSettings?
        public let packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap?
        public let pipelineDetails: [MultiplexProgramPipelineDetail]?
        public let programName: String?

        public init(channelId: String? = nil, multiplexProgramSettings: MultiplexProgramSettings? = nil, packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap? = nil, pipelineDetails: [MultiplexProgramPipelineDetail]? = nil, programName: String? = nil) {
            self.channelId = channelId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.packetIdentifiersMap = packetIdentifiersMap
            self.pipelineDetails = pipelineDetails
            self.programName = programName
        }

        private enum CodingKeys: String, CodingKey {
            case channelId
            case multiplexProgramSettings
            case packetIdentifiersMap
            case pipelineDetails
            case programName
        }
    }

    public struct DescribeMultiplexRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId"))
        ]

        public let multiplexId: String

        public init(multiplexId: String) {
            self.multiplexId = multiplexId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeMultiplexResponse: AWSDecodableShape {
        public let arn: String?
        public let availabilityZones: [String]?
        public let destinations: [MultiplexOutputDestination]?
        public let id: String?
        public let multiplexSettings: MultiplexSettings?
        public let name: String?
        public let pipelinesRunningCount: Int?
        public let programCount: Int?
        public let state: MultiplexState?
        public let tags: [String: String]?

        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case availabilityZones
            case destinations
            case id
            case multiplexSettings
            case name
            case pipelinesRunningCount
            case programCount
            case state
            case tags
        }
    }

    public struct DescribeOfferingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "offeringId", location: .uri(locationName: "offeringId"))
        ]

        public let offeringId: String

        public init(offeringId: String) {
            self.offeringId = offeringId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeOfferingResponse: AWSDecodableShape {
        public let arn: String?
        public let currencyCode: String?
        public let duration: Int?
        public let durationUnits: OfferingDurationUnits?
        public let fixedPrice: Double?
        public let offeringDescription: String?
        public let offeringId: String?
        public let offeringType: OfferingType?
        public let region: String?
        public let resourceSpecification: ReservationResourceSpecification?
        public let usagePrice: Double?

        public init(arn: String? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, fixedPrice: Double? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.fixedPrice = fixedPrice
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.resourceSpecification = resourceSpecification
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case currencyCode
            case duration
            case durationUnits
            case fixedPrice
            case offeringDescription
            case offeringId
            case offeringType
            case region
            case resourceSpecification
            case usagePrice
        }
    }

    public struct DescribeReservationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "reservationId", location: .uri(locationName: "reservationId"))
        ]

        public let reservationId: String

        public init(reservationId: String) {
            self.reservationId = reservationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeReservationResponse: AWSDecodableShape {
        public let arn: String?
        public let count: Int?
        public let currencyCode: String?
        public let duration: Int?
        public let durationUnits: OfferingDurationUnits?
        public let end: String?
        public let fixedPrice: Double?
        public let name: String?
        public let offeringDescription: String?
        public let offeringId: String?
        public let offeringType: OfferingType?
        public let region: String?
        public let reservationId: String?
        public let resourceSpecification: ReservationResourceSpecification?
        public let start: String?
        public let state: ReservationState?
        public let tags: [String: String]?
        public let usagePrice: Double?

        public init(arn: String? = nil, count: Int? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, end: String? = nil, fixedPrice: Double? = nil, name: String? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, reservationId: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, start: String? = nil, state: ReservationState? = nil, tags: [String: String]? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.count = count
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.end = end
            self.fixedPrice = fixedPrice
            self.name = name
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.reservationId = reservationId
            self.resourceSpecification = resourceSpecification
            self.start = start
            self.state = state
            self.tags = tags
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case count
            case currencyCode
            case duration
            case durationUnits
            case end
            case fixedPrice
            case name
            case offeringDescription
            case offeringId
            case offeringType
            case region
            case reservationId
            case resourceSpecification
            case start
            case state
            case tags
            case usagePrice
        }
    }

    public struct DescribeScheduleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelId", location: .uri(locationName: "channelId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let channelId: String
        public let maxResults: Int?
        public let nextToken: String?

        public init(channelId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.channelId = channelId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeScheduleResponse: AWSDecodableShape {
        public let nextToken: String?
        public let scheduleActions: [ScheduleAction]?

        public init(nextToken: String? = nil, scheduleActions: [ScheduleAction]? = nil) {
            self.nextToken = nextToken
            self.scheduleActions = scheduleActions
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken
            case scheduleActions
        }
    }

    public struct DvbNitSettings: AWSEncodableShape & AWSDecodableShape {
        /// The numeric value placed in the Network Information Table (NIT).
        public let networkId: Int
        /// The network name text placed in the networkNameDescriptor inside the Network Information Table. Maximum length is 256 characters.
        public let networkName: String
        /// The number of milliseconds between instances of this table in the output transport stream.
        public let repInterval: Int?

        public init(networkId: Int, networkName: String, repInterval: Int? = nil) {
            self.networkId = networkId
            self.networkName = networkName
            self.repInterval = repInterval
        }

        public func validate(name: String) throws {
            try self.validate(self.networkId, name: "networkId", parent: name, max: 65536)
            try self.validate(self.networkId, name: "networkId", parent: name, min: 0)
            try self.validate(self.networkName, name: "networkName", parent: name, max: 256)
            try self.validate(self.networkName, name: "networkName", parent: name, min: 1)
            try self.validate(self.repInterval, name: "repInterval", parent: name, max: 10000)
            try self.validate(self.repInterval, name: "repInterval", parent: name, min: 25)
        }

        private enum CodingKeys: String, CodingKey {
            case networkId
            case networkName
            case repInterval
        }
    }

    public struct DvbSdtSettings: AWSEncodableShape & AWSDecodableShape {
        /// Selects method of inserting SDT information into output stream. The sdtFollow setting copies SDT information from input stream to output stream. The sdtFollowIfPresent setting copies SDT information from input stream to output stream if SDT information is present in the input, otherwise it will fall back on the user-defined values. The sdtManual setting means user will enter the SDT information. The sdtNone setting means output stream will not contain SDT information.
        public let outputSdt: DvbSdtOutputSdt?
        /// The number of milliseconds between instances of this table in the output transport stream.
        public let repInterval: Int?
        /// The service name placed in the serviceDescriptor in the Service Description Table. Maximum length is 256 characters.
        public let serviceName: String?
        /// The service provider name placed in the serviceDescriptor in the Service Description Table. Maximum length is 256 characters.
        public let serviceProviderName: String?

        public init(outputSdt: DvbSdtOutputSdt? = nil, repInterval: Int? = nil, serviceName: String? = nil, serviceProviderName: String? = nil) {
            self.outputSdt = outputSdt
            self.repInterval = repInterval
            self.serviceName = serviceName
            self.serviceProviderName = serviceProviderName
        }

        public func validate(name: String) throws {
            try self.validate(self.repInterval, name: "repInterval", parent: name, max: 2000)
            try self.validate(self.repInterval, name: "repInterval", parent: name, min: 25)
            try self.validate(self.serviceName, name: "serviceName", parent: name, max: 256)
            try self.validate(self.serviceName, name: "serviceName", parent: name, min: 1)
            try self.validate(self.serviceProviderName, name: "serviceProviderName", parent: name, max: 256)
            try self.validate(self.serviceProviderName, name: "serviceProviderName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case outputSdt
            case repInterval
            case serviceName
            case serviceProviderName
        }
    }

    public struct DvbSubDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// If no explicit xPosition or yPosition is provided, setting alignment to centered will place the captions at the bottom center of the output. Similarly, setting a left alignment will align captions to the bottom left of the output. If x and y positions are given in conjunction with the alignment parameter, the font will be justified (either left or centered) relative to those coordinates. Selecting "smart" justification will left-justify live subtitles and center-justify pre-recorded subtitles.  This option is not valid for source captions that are STL or 608/embedded.  These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let alignment: DvbSubDestinationAlignment?
        /// Specifies the color of the rectangle behind the captions.  All burn-in and DVB-Sub font settings must match.
        public let backgroundColor: DvbSubDestinationBackgroundColor?
        /// Specifies the opacity of the background rectangle. 255 is opaque; 0 is transparent. Leaving this parameter blank is equivalent to setting it to 0 (transparent).  All burn-in and DVB-Sub font settings must match.
        public let backgroundOpacity: Int?
        /// External font file used for caption burn-in. File extension must be 'ttf' or 'tte'.  Although the user can select output fonts for many different types of input captions, embedded, STL and teletext sources use a strict grid system. Using external fonts with these caption sources could cause unexpected display of proportional fonts.  All burn-in and DVB-Sub font settings must match.
        public let font: InputLocation?
        /// Specifies the color of the burned-in captions.  This option is not valid for source captions that are STL, 608/embedded or teletext.  These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let fontColor: DvbSubDestinationFontColor?
        /// Specifies the opacity of the burned-in captions. 255 is opaque; 0 is transparent.  All burn-in and DVB-Sub font settings must match.
        public let fontOpacity: Int?
        /// Font resolution in DPI (dots per inch); default is 96 dpi.  All burn-in and DVB-Sub font settings must match.
        public let fontResolution: Int?
        /// When set to auto fontSize will scale depending on the size of the output.  Giving a positive integer will specify the exact font size in points.  All burn-in and DVB-Sub font settings must match.
        public let fontSize: String?
        /// Specifies font outline color. This option is not valid for source captions that are either 608/embedded or teletext. These source settings are already pre-defined by the caption stream. All burn-in and DVB-Sub font settings must match.
        public let outlineColor: DvbSubDestinationOutlineColor?
        /// Specifies font outline size in pixels. This option is not valid for source captions that are either 608/embedded or teletext. These source settings are already pre-defined by the caption stream. All burn-in and DVB-Sub font settings must match.
        public let outlineSize: Int?
        /// Specifies the color of the shadow cast by the captions.  All burn-in and DVB-Sub font settings must match.
        public let shadowColor: DvbSubDestinationShadowColor?
        /// Specifies the opacity of the shadow. 255 is opaque; 0 is transparent. Leaving this parameter blank is equivalent to setting it to 0 (transparent).  All burn-in and DVB-Sub font settings must match.
        public let shadowOpacity: Int?
        /// Specifies the horizontal offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels to the left.  All burn-in and DVB-Sub font settings must match.
        public let shadowXOffset: Int?
        /// Specifies the vertical offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text.  All burn-in and DVB-Sub font settings must match.
        public let shadowYOffset: Int?
        /// Controls whether a fixed grid size will be used to generate the output subtitles bitmap. Only applicable for Teletext inputs and DVB-Sub/Burn-in outputs.
        public let teletextGridControl: DvbSubDestinationTeletextGridControl?
        /// Specifies the horizontal position of the caption relative to the left side of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit xPosition is provided, the horizontal caption position will be determined by the alignment parameter.  This option is not valid for source captions that are STL, 608/embedded or teletext. These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let xPosition: Int?
        /// Specifies the vertical position of the caption relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the caption will be positioned towards the bottom of the output.  This option is not valid for source captions that are STL, 608/embedded or teletext.  These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let yPosition: Int?

        public init(alignment: DvbSubDestinationAlignment? = nil, backgroundColor: DvbSubDestinationBackgroundColor? = nil, backgroundOpacity: Int? = nil, font: InputLocation? = nil, fontColor: DvbSubDestinationFontColor? = nil, fontOpacity: Int? = nil, fontResolution: Int? = nil, fontSize: String? = nil, outlineColor: DvbSubDestinationOutlineColor? = nil, outlineSize: Int? = nil, shadowColor: DvbSubDestinationShadowColor? = nil, shadowOpacity: Int? = nil, shadowXOffset: Int? = nil, shadowYOffset: Int? = nil, teletextGridControl: DvbSubDestinationTeletextGridControl? = nil, xPosition: Int? = nil, yPosition: Int? = nil) {
            self.alignment = alignment
            self.backgroundColor = backgroundColor
            self.backgroundOpacity = backgroundOpacity
            self.font = font
            self.fontColor = fontColor
            self.fontOpacity = fontOpacity
            self.fontResolution = fontResolution
            self.fontSize = fontSize
            self.outlineColor = outlineColor
            self.outlineSize = outlineSize
            self.shadowColor = shadowColor
            self.shadowOpacity = shadowOpacity
            self.shadowXOffset = shadowXOffset
            self.shadowYOffset = shadowYOffset
            self.teletextGridControl = teletextGridControl
            self.xPosition = xPosition
            self.yPosition = yPosition
        }

        public func validate(name: String) throws {
            try self.validate(self.backgroundOpacity, name: "backgroundOpacity", parent: name, max: 255)
            try self.validate(self.backgroundOpacity, name: "backgroundOpacity", parent: name, min: 0)
            try self.validate(self.fontOpacity, name: "fontOpacity", parent: name, max: 255)
            try self.validate(self.fontOpacity, name: "fontOpacity", parent: name, min: 0)
            try self.validate(self.fontResolution, name: "fontResolution", parent: name, max: 600)
            try self.validate(self.fontResolution, name: "fontResolution", parent: name, min: 96)
            try self.validate(self.outlineSize, name: "outlineSize", parent: name, max: 10)
            try self.validate(self.outlineSize, name: "outlineSize", parent: name, min: 0)
            try self.validate(self.shadowOpacity, name: "shadowOpacity", parent: name, max: 255)
            try self.validate(self.shadowOpacity, name: "shadowOpacity", parent: name, min: 0)
            try self.validate(self.xPosition, name: "xPosition", parent: name, min: 0)
            try self.validate(self.yPosition, name: "yPosition", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case alignment
            case backgroundColor
            case backgroundOpacity
            case font
            case fontColor
            case fontOpacity
            case fontResolution
            case fontSize
            case outlineColor
            case outlineSize
            case shadowColor
            case shadowOpacity
            case shadowXOffset
            case shadowYOffset
            case teletextGridControl
            case xPosition
            case yPosition
        }
    }

    public struct DvbSubSourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// When using DVB-Sub with Burn-In or SMPTE-TT, use this PID for the source content. Unused for DVB-Sub passthrough. All DVB-Sub content is passed through, regardless of selectors.
        public let pid: Int?

        public init(pid: Int? = nil) {
            self.pid = pid
        }

        public func validate(name: String) throws {
            try self.validate(self.pid, name: "pid", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case pid
        }
    }

    public struct DvbTdtSettings: AWSEncodableShape & AWSDecodableShape {
        /// The number of milliseconds between instances of this table in the output transport stream.
        public let repInterval: Int?

        public init(repInterval: Int? = nil) {
            self.repInterval = repInterval
        }

        public func validate(name: String) throws {
            try self.validate(self.repInterval, name: "repInterval", parent: name, max: 30000)
            try self.validate(self.repInterval, name: "repInterval", parent: name, min: 1000)
        }

        private enum CodingKeys: String, CodingKey {
            case repInterval
        }
    }

    public struct Eac3Settings: AWSEncodableShape & AWSDecodableShape {
        /// When set to attenuate3Db, applies a 3 dB attenuation to the surround channels. Only used for 3/2 coding mode.
        public let attenuationControl: Eac3AttenuationControl?
        /// Average bitrate in bits/second. Valid bitrates depend on the coding mode.
        public let bitrate: Double?
        /// Specifies the bitstream mode (bsmod) for the emitted E-AC-3 stream. See ATSC A/52-2012 (Annex E) for background on these values.
        public let bitstreamMode: Eac3BitstreamMode?
        /// Dolby Digital Plus coding mode. Determines number of channels.
        public let codingMode: Eac3CodingMode?
        /// When set to enabled, activates a DC highpass filter for all input channels.
        public let dcFilter: Eac3DcFilter?
        /// Sets the dialnorm for the output. If blank and input audio is Dolby Digital Plus, dialnorm will be passed through.
        public let dialnorm: Int?
        /// Sets the Dolby dynamic range compression profile.
        public let drcLine: Eac3DrcLine?
        /// Sets the profile for heavy Dolby dynamic range compression, ensures that the instantaneous signal peaks do not exceed specified levels.
        public let drcRf: Eac3DrcRf?
        /// When encoding 3/2 audio, setting to lfe enables the LFE channel
        public let lfeControl: Eac3LfeControl?
        /// When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding. Only valid with codingMode32 coding mode.
        public let lfeFilter: Eac3LfeFilter?
        /// Left only/Right only center mix level. Only used for 3/2 coding mode.
        public let loRoCenterMixLevel: Double?
        /// Left only/Right only surround mix level. Only used for 3/2 coding mode.
        public let loRoSurroundMixLevel: Double?
        /// Left total/Right total center mix level. Only used for 3/2 coding mode.
        public let ltRtCenterMixLevel: Double?
        /// Left total/Right total surround mix level. Only used for 3/2 coding mode.
        public let ltRtSurroundMixLevel: Double?
        /// When set to followInput, encoder metadata will be sourced from the DD, DD+, or DolbyE decoder that supplied this audio data. If audio was not supplied from one of these streams, then the static metadata settings will be used.
        public let metadataControl: Eac3MetadataControl?
        /// When set to whenPossible, input DD+ audio will be passed through if it is present on the input. This detection is dynamic over the life of the transcode. Inputs that alternate between DD+ and non-DD+ content will have a consistent DD+ output as the system alternates between passthrough and encoding.
        public let passthroughControl: Eac3PassthroughControl?
        /// When set to shift90Degrees, applies a 90-degree phase shift to the surround channels. Only used for 3/2 coding mode.
        public let phaseControl: Eac3PhaseControl?
        /// Stereo downmix preference. Only used for 3/2 coding mode.
        public let stereoDownmix: Eac3StereoDownmix?
        /// When encoding 3/2 audio, sets whether an extra center back surround channel is matrix encoded into the left and right surround channels.
        public let surroundExMode: Eac3SurroundExMode?
        /// When encoding 2/0 audio, sets whether Dolby Surround is matrix encoded into the two channels.
        public let surroundMode: Eac3SurroundMode?

        public init(attenuationControl: Eac3AttenuationControl? = nil, bitrate: Double? = nil, bitstreamMode: Eac3BitstreamMode? = nil, codingMode: Eac3CodingMode? = nil, dcFilter: Eac3DcFilter? = nil, dialnorm: Int? = nil, drcLine: Eac3DrcLine? = nil, drcRf: Eac3DrcRf? = nil, lfeControl: Eac3LfeControl? = nil, lfeFilter: Eac3LfeFilter? = nil, loRoCenterMixLevel: Double? = nil, loRoSurroundMixLevel: Double? = nil, ltRtCenterMixLevel: Double? = nil, ltRtSurroundMixLevel: Double? = nil, metadataControl: Eac3MetadataControl? = nil, passthroughControl: Eac3PassthroughControl? = nil, phaseControl: Eac3PhaseControl? = nil, stereoDownmix: Eac3StereoDownmix? = nil, surroundExMode: Eac3SurroundExMode? = nil, surroundMode: Eac3SurroundMode? = nil) {
            self.attenuationControl = attenuationControl
            self.bitrate = bitrate
            self.bitstreamMode = bitstreamMode
            self.codingMode = codingMode
            self.dcFilter = dcFilter
            self.dialnorm = dialnorm
            self.drcLine = drcLine
            self.drcRf = drcRf
            self.lfeControl = lfeControl
            self.lfeFilter = lfeFilter
            self.loRoCenterMixLevel = loRoCenterMixLevel
            self.loRoSurroundMixLevel = loRoSurroundMixLevel
            self.ltRtCenterMixLevel = ltRtCenterMixLevel
            self.ltRtSurroundMixLevel = ltRtSurroundMixLevel
            self.metadataControl = metadataControl
            self.passthroughControl = passthroughControl
            self.phaseControl = phaseControl
            self.stereoDownmix = stereoDownmix
            self.surroundExMode = surroundExMode
            self.surroundMode = surroundMode
        }

        public func validate(name: String) throws {
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, max: 31)
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case attenuationControl
            case bitrate
            case bitstreamMode
            case codingMode
            case dcFilter
            case dialnorm
            case drcLine
            case drcRf
            case lfeControl
            case lfeFilter
            case loRoCenterMixLevel
            case loRoSurroundMixLevel
            case ltRtCenterMixLevel
            case ltRtSurroundMixLevel
            case metadataControl
            case passthroughControl
            case phaseControl
            case stereoDownmix
            case surroundExMode
            case surroundMode
        }
    }

    public struct EbuTtDDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies how to handle the gap between the lines (in multi-line captions).
        /// - enabled: Fill with the captions background color (as specified in the input captions).
        /// - disabled: Leave the gap unfilled.
        public let fillLineGap: EbuTtDFillLineGapControl?
        /// Specifies the font family to include in the font data attached to the EBU-TT captions. Valid only if styleControl is set to include. If you leave this field empty, the font family is set to "monospaced". (If styleControl is set to exclude, the font family is always set to "monospaced".)
        /// You specify only the font family. All other style information (color, bold, position and so on) is copied from the input captions. The size is always set to 100% to allow the downstream player to choose the size.
        /// - Enter a list of font families, as a comma-separated list of font names, in order of preference. The name can be a font family (such as “Arial”), or a generic font family (such as “serif”), or “default” (to let the downstream player choose the font).
        /// - Leave blank to set the family to “monospace”.
        public let fontFamily: String?
        /// Specifies the style information (font color, font position, and so on) to include in the font data that is attached to the EBU-TT captions.
        /// - include: Take the style information (font color, font position, and so on) from the source captions and include that information in the font data attached to the EBU-TT captions. This option is valid only if the source captions are Embedded or Teletext.
        /// - exclude: In the font data attached to the EBU-TT captions, set the font family to "monospaced". Do not include any other style information.
        public let styleControl: EbuTtDDestinationStyleControl?

        public init(fillLineGap: EbuTtDFillLineGapControl? = nil, fontFamily: String? = nil, styleControl: EbuTtDDestinationStyleControl? = nil) {
            self.fillLineGap = fillLineGap
            self.fontFamily = fontFamily
            self.styleControl = styleControl
        }

        private enum CodingKeys: String, CodingKey {
            case fillLineGap
            case fontFamily
            case styleControl
        }
    }

    public struct EmbeddedDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct EmbeddedPlusScte20DestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct EmbeddedSourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// If upconvert, 608 data is both passed through via the "608 compatibility bytes" fields of the 708 wrapper as well as translated into 708. 708 data present in the source content will be discarded.
        public let convert608To708: EmbeddedConvert608To708?
        /// Set to "auto" to handle streams with intermittent and/or non-aligned SCTE-20 and Embedded captions.
        public let scte20Detection: EmbeddedScte20Detection?
        /// Specifies the 608/708 channel number within the video track from which to extract captions. Unused for passthrough.
        public let source608ChannelNumber: Int?
        /// This field is unused and deprecated.
        public let source608TrackNumber: Int?

        public init(convert608To708: EmbeddedConvert608To708? = nil, scte20Detection: EmbeddedScte20Detection? = nil, source608ChannelNumber: Int? = nil, source608TrackNumber: Int? = nil) {
            self.convert608To708 = convert608To708
            self.scte20Detection = scte20Detection
            self.source608ChannelNumber = source608ChannelNumber
            self.source608TrackNumber = source608TrackNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.source608ChannelNumber, name: "source608ChannelNumber", parent: name, max: 4)
            try self.validate(self.source608ChannelNumber, name: "source608ChannelNumber", parent: name, min: 1)
            try self.validate(self.source608TrackNumber, name: "source608TrackNumber", parent: name, max: 5)
            try self.validate(self.source608TrackNumber, name: "source608TrackNumber", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case convert608To708
            case scte20Detection
            case source608ChannelNumber
            case source608TrackNumber
        }
    }

    public struct EncoderSettings: AWSEncodableShape & AWSDecodableShape {
        public let audioDescriptions: [AudioDescription]
        /// Settings for ad avail blanking.
        public let availBlanking: AvailBlanking?
        /// Event-wide configuration settings for ad avail insertion.
        public let availConfiguration: AvailConfiguration?
        /// Settings for blackout slate.
        public let blackoutSlate: BlackoutSlate?
        /// Settings for caption decriptions
        public let captionDescriptions: [CaptionDescription]?
        /// Feature Activations
        public let featureActivations: FeatureActivations?
        /// Configuration settings that apply to the event as a whole.
        public let globalConfiguration: GlobalConfiguration?
        /// Nielsen configuration settings.
        public let nielsenConfiguration: NielsenConfiguration?
        public let outputGroups: [OutputGroup]
        /// Contains settings used to acquire and adjust timecode information from inputs.
        public let timecodeConfig: TimecodeConfig
        public let videoDescriptions: [VideoDescription]

        public init(audioDescriptions: [AudioDescription], availBlanking: AvailBlanking? = nil, availConfiguration: AvailConfiguration? = nil, blackoutSlate: BlackoutSlate? = nil, captionDescriptions: [CaptionDescription]? = nil, featureActivations: FeatureActivations? = nil, globalConfiguration: GlobalConfiguration? = nil, nielsenConfiguration: NielsenConfiguration? = nil, outputGroups: [OutputGroup], timecodeConfig: TimecodeConfig, videoDescriptions: [VideoDescription]) {
            self.audioDescriptions = audioDescriptions
            self.availBlanking = availBlanking
            self.availConfiguration = availConfiguration
            self.blackoutSlate = blackoutSlate
            self.captionDescriptions = captionDescriptions
            self.featureActivations = featureActivations
            self.globalConfiguration = globalConfiguration
            self.nielsenConfiguration = nielsenConfiguration
            self.outputGroups = outputGroups
            self.timecodeConfig = timecodeConfig
            self.videoDescriptions = videoDescriptions
        }

        public func validate(name: String) throws {
            try self.audioDescriptions.forEach {
                try $0.validate(name: "\(name).audioDescriptions[]")
            }
            try self.availConfiguration?.validate(name: "\(name).availConfiguration")
            try self.blackoutSlate?.validate(name: "\(name).blackoutSlate")
            try self.captionDescriptions?.forEach {
                try $0.validate(name: "\(name).captionDescriptions[]")
            }
            try self.globalConfiguration?.validate(name: "\(name).globalConfiguration")
            try self.outputGroups.forEach {
                try $0.validate(name: "\(name).outputGroups[]")
            }
            try self.timecodeConfig.validate(name: "\(name).timecodeConfig")
            try self.videoDescriptions.forEach {
                try $0.validate(name: "\(name).videoDescriptions[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case audioDescriptions
            case availBlanking
            case availConfiguration
            case blackoutSlate
            case captionDescriptions
            case featureActivations
            case globalConfiguration
            case nielsenConfiguration
            case outputGroups
            case timecodeConfig
            case videoDescriptions
        }
    }

    public struct FailoverCondition: AWSEncodableShape & AWSDecodableShape {
        /// Failover condition type-specific settings.
        public let failoverConditionSettings: FailoverConditionSettings?

        public init(failoverConditionSettings: FailoverConditionSettings? = nil) {
            self.failoverConditionSettings = failoverConditionSettings
        }

        public func validate(name: String) throws {
            try self.failoverConditionSettings?.validate(name: "\(name).failoverConditionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case failoverConditionSettings
        }
    }

    public struct FailoverConditionSettings: AWSEncodableShape & AWSDecodableShape {
        /// MediaLive will perform a failover if the specified audio selector is silent for the specified period.
        public let audioSilenceSettings: AudioSilenceFailoverSettings?
        /// MediaLive will perform a failover if content is not detected in this input for the specified period.
        public let inputLossSettings: InputLossFailoverSettings?
        /// MediaLive will perform a failover if content is considered black for the specified period.
        public let videoBlackSettings: VideoBlackFailoverSettings?

        public init(audioSilenceSettings: AudioSilenceFailoverSettings? = nil, inputLossSettings: InputLossFailoverSettings? = nil, videoBlackSettings: VideoBlackFailoverSettings? = nil) {
            self.audioSilenceSettings = audioSilenceSettings
            self.inputLossSettings = inputLossSettings
            self.videoBlackSettings = videoBlackSettings
        }

        public func validate(name: String) throws {
            try self.audioSilenceSettings?.validate(name: "\(name).audioSilenceSettings")
            try self.inputLossSettings?.validate(name: "\(name).inputLossSettings")
            try self.videoBlackSettings?.validate(name: "\(name).videoBlackSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioSilenceSettings
            case inputLossSettings
            case videoBlackSettings
        }
    }

    public struct FeatureActivations: AWSEncodableShape & AWSDecodableShape {
        /// Enables the Input Prepare feature. You can create Input Prepare actions in the schedule only if this feature is enabled.
        /// If you disable the feature on an existing schedule, make sure that you first delete all input prepare actions from the schedule.
        public let inputPrepareScheduleActions: FeatureActivationsInputPrepareScheduleActions?

        public init(inputPrepareScheduleActions: FeatureActivationsInputPrepareScheduleActions? = nil) {
            self.inputPrepareScheduleActions = inputPrepareScheduleActions
        }

        private enum CodingKeys: String, CodingKey {
            case inputPrepareScheduleActions
        }
    }

    public struct FecOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Parameter D from SMPTE 2022-1. The height of the FEC protection matrix.  The number of transport stream packets per column error correction packet. Must be between 4 and 20, inclusive.
        public let columnDepth: Int?
        /// Enables column only or column and row based FEC
        public let includeFec: FecOutputIncludeFec?
        /// Parameter L from SMPTE 2022-1. The width of the FEC protection matrix.  Must be between 1 and 20, inclusive. If only Column FEC is used, then larger values increase robustness.  If Row FEC is used, then this is the number of transport stream packets per row error correction packet, and the value must be between 4 and 20, inclusive, if includeFec is columnAndRow. If includeFec is column, this value must be 1 to 20, inclusive.
        public let rowLength: Int?

        public init(columnDepth: Int? = nil, includeFec: FecOutputIncludeFec? = nil, rowLength: Int? = nil) {
            self.columnDepth = columnDepth
            self.includeFec = includeFec
            self.rowLength = rowLength
        }

        public func validate(name: String) throws {
            try self.validate(self.columnDepth, name: "columnDepth", parent: name, max: 20)
            try self.validate(self.columnDepth, name: "columnDepth", parent: name, min: 4)
            try self.validate(self.rowLength, name: "rowLength", parent: name, max: 20)
            try self.validate(self.rowLength, name: "rowLength", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case columnDepth
            case includeFec
            case rowLength
        }
    }

    public struct FixedModeScheduleActionStartSettings: AWSEncodableShape & AWSDecodableShape {
        /// Start time for the action to start in the channel. (Not the time for the action to be added to the schedule: actions are always added to the schedule immediately.) UTC format: yyyy-mm-ddThh:mm:ss.nnnZ. All the letters are digits (for example, mm might be 01) except for the two constants "T" for time and "Z" for "UTC format".
        public let time: String

        public init(time: String) {
            self.time = time
        }

        private enum CodingKeys: String, CodingKey {
            case time
        }
    }

    public struct Fmp4HlsSettings: AWSEncodableShape & AWSDecodableShape {
        /// List all the audio groups that are used with the video output stream. Input all the audio GROUP-IDs that are associated to the video, separate by ','.
        public let audioRenditionSets: String?
        /// If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
        public let nielsenId3Behavior: Fmp4NielsenId3Behavior?
        /// When set to passthrough, timed metadata is passed through from input to output.
        public let timedMetadataBehavior: Fmp4TimedMetadataBehavior?

        public init(audioRenditionSets: String? = nil, nielsenId3Behavior: Fmp4NielsenId3Behavior? = nil, timedMetadataBehavior: Fmp4TimedMetadataBehavior? = nil) {
            self.audioRenditionSets = audioRenditionSets
            self.nielsenId3Behavior = nielsenId3Behavior
            self.timedMetadataBehavior = timedMetadataBehavior
        }

        private enum CodingKeys: String, CodingKey {
            case audioRenditionSets
            case nielsenId3Behavior
            case timedMetadataBehavior
        }
    }

    public struct FollowModeScheduleActionStartSettings: AWSEncodableShape & AWSDecodableShape {
        /// Identifies whether this action starts relative to the start or relative to the end of the reference action.
        public let followPoint: FollowPoint
        /// The action name of another action that this one refers to.
        public let referenceActionName: String

        public init(followPoint: FollowPoint, referenceActionName: String) {
            self.followPoint = followPoint
            self.referenceActionName = referenceActionName
        }

        private enum CodingKeys: String, CodingKey {
            case followPoint
            case referenceActionName
        }
    }

    public struct FrameCaptureGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// The destination for the frame capture files. Either the URI for an Amazon S3 bucket and object, plus a file name prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling-) or the URI for a MediaStore container, plus a file name prefix (for example, mediastoressl://sportsDelivery/20180820/curling-). The final file names consist of the prefix from the destination field (for example, "curling-") + name modifier + the counter (5 digits, starting from 00001) + extension (which is always .jpg).  For example, curling-low.00001.jpg
        public let destination: OutputLocationRef

        public init(destination: OutputLocationRef) {
            self.destination = destination
        }

        private enum CodingKeys: String, CodingKey {
            case destination
        }
    }

    public struct FrameCaptureHlsSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct FrameCaptureOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Required if the output group contains more than one output. This modifier forms part of the output file name.
        public let nameModifier: String?

        public init(nameModifier: String? = nil) {
            self.nameModifier = nameModifier
        }

        private enum CodingKeys: String, CodingKey {
            case nameModifier
        }
    }

    public struct FrameCaptureSettings: AWSEncodableShape & AWSDecodableShape {
        /// The frequency at which to capture frames for inclusion in the output. May be specified in either seconds or milliseconds, as specified by captureIntervalUnits.
        public let captureInterval: Int?
        /// Unit for the frame capture interval.
        public let captureIntervalUnits: FrameCaptureIntervalUnit?

        public init(captureInterval: Int? = nil, captureIntervalUnits: FrameCaptureIntervalUnit? = nil) {
            self.captureInterval = captureInterval
            self.captureIntervalUnits = captureIntervalUnits
        }

        public func validate(name: String) throws {
            try self.validate(self.captureInterval, name: "captureInterval", parent: name, max: 3_600_000)
            try self.validate(self.captureInterval, name: "captureInterval", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case captureInterval
            case captureIntervalUnits
        }
    }

    public struct GlobalConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Value to set the initial audio gain for the Live Event.
        public let initialAudioGain: Int?
        /// Indicates the action to take when the current input completes (e.g. end-of-file). When switchAndLoopInputs is configured the encoder will restart at the beginning of the first input.  When "none" is configured the encoder will transcode either black, a solid color, or a user specified slate images per the "Input Loss Behavior" configuration until the next input switch occurs (which is controlled through the Channel Schedule API).
        public let inputEndAction: GlobalConfigurationInputEndAction?
        /// Settings for system actions when input is lost.
        public let inputLossBehavior: InputLossBehavior?
        /// Indicates how MediaLive pipelines are synchronized.
        /// PIPELINE_LOCKING - MediaLive will attempt to synchronize the output of each pipeline to the other.
        /// EPOCH_LOCKING - MediaLive will attempt to synchronize the output of each pipeline to the Unix epoch.
        public let outputLockingMode: GlobalConfigurationOutputLockingMode?
        /// Indicates whether the rate of frames emitted by the Live encoder should be paced by its system clock (which optionally may be locked to another source via NTP) or should be locked to the clock of the source that is providing the input stream.
        public let outputTimingSource: GlobalConfigurationOutputTimingSource?
        /// Adjusts video input buffer for streams with very low video framerates. This is commonly set to enabled for music channels with less than one video frame per second.
        public let supportLowFramerateInputs: GlobalConfigurationLowFramerateInputs?

        public init(initialAudioGain: Int? = nil, inputEndAction: GlobalConfigurationInputEndAction? = nil, inputLossBehavior: InputLossBehavior? = nil, outputLockingMode: GlobalConfigurationOutputLockingMode? = nil, outputTimingSource: GlobalConfigurationOutputTimingSource? = nil, supportLowFramerateInputs: GlobalConfigurationLowFramerateInputs? = nil) {
            self.initialAudioGain = initialAudioGain
            self.inputEndAction = inputEndAction
            self.inputLossBehavior = inputLossBehavior
            self.outputLockingMode = outputLockingMode
            self.outputTimingSource = outputTimingSource
            self.supportLowFramerateInputs = supportLowFramerateInputs
        }

        public func validate(name: String) throws {
            try self.validate(self.initialAudioGain, name: "initialAudioGain", parent: name, max: 60)
            try self.validate(self.initialAudioGain, name: "initialAudioGain", parent: name, min: -60)
            try self.inputLossBehavior?.validate(name: "\(name).inputLossBehavior")
        }

        private enum CodingKeys: String, CodingKey {
            case initialAudioGain
            case inputEndAction
            case inputLossBehavior
            case outputLockingMode
            case outputTimingSource
            case supportLowFramerateInputs
        }
    }

    public struct H264ColorSpaceSettings: AWSEncodableShape & AWSDecodableShape {
        public let colorSpacePassthroughSettings: ColorSpacePassthroughSettings?
        public let rec601Settings: Rec601Settings?
        public let rec709Settings: Rec709Settings?

        public init(colorSpacePassthroughSettings: ColorSpacePassthroughSettings? = nil, rec601Settings: Rec601Settings? = nil, rec709Settings: Rec709Settings? = nil) {
            self.colorSpacePassthroughSettings = colorSpacePassthroughSettings
            self.rec601Settings = rec601Settings
            self.rec709Settings = rec709Settings
        }

        private enum CodingKeys: String, CodingKey {
            case colorSpacePassthroughSettings
            case rec601Settings
            case rec709Settings
        }
    }

    public struct H264FilterSettings: AWSEncodableShape & AWSDecodableShape {
        public let temporalFilterSettings: TemporalFilterSettings?

        public init(temporalFilterSettings: TemporalFilterSettings? = nil) {
            self.temporalFilterSettings = temporalFilterSettings
        }

        private enum CodingKeys: String, CodingKey {
            case temporalFilterSettings
        }
    }

    public struct H264Settings: AWSEncodableShape & AWSDecodableShape {
        /// Adaptive quantization. Allows intra-frame quantizers to vary to improve visual quality.
        public let adaptiveQuantization: H264AdaptiveQuantization?
        /// Indicates that AFD values will be written into the output stream.  If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases where multiple AFD values are valid). If set to "fixed", the AFD value will be the value configured in the fixedAfd parameter.
        public let afdSignaling: AfdSignaling?
        /// Average bitrate in bits/second. Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth output group, each output must have a unique value when its bitrate is rounded down to the nearest multiple of 1000.
        public let bitrate: Int?
        /// Percentage of the buffer that should initially be filled (HRD buffer model).
        public let bufFillPct: Int?
        /// Size of buffer (HRD buffer model) in bits.
        public let bufSize: Int?
        /// Includes colorspace metadata in the output.
        public let colorMetadata: H264ColorMetadata?
        /// Color Space settings
        public let colorSpaceSettings: H264ColorSpaceSettings?
        /// Entropy encoding mode.  Use cabac (must be in Main or High profile) or cavlc.
        public let entropyEncoding: H264EntropyEncoding?
        /// Optional filters that you can apply to an encode.
        public let filterSettings: H264FilterSettings?
        /// Four bit AFD value to write on all frames of video in the output stream. Only valid when afdSignaling is set to 'Fixed'.
        public let fixedAfd: FixedAfd?
        /// If set to enabled, adjust quantization within each frame to reduce flicker or 'pop' on I-frames.
        public let flickerAq: H264FlickerAq?
        /// This setting applies only when scan type is "interlaced." It controls whether coding is performed on a field basis or on a frame basis. (When the video is progressive, the coding is always performed on a frame basis.)
        /// enabled: Force MediaLive to code on a field basis, so that odd and even sets of fields are coded separately.
        /// disabled: Code the two sets of fields separately (on a field basis) or together (on a frame basis using PAFF), depending on what is most appropriate for the content.
        public let forceFieldPictures: H264ForceFieldPictures?
        /// This field indicates how the output video frame rate is specified.  If "specified" is selected then the output video frame rate is determined by framerateNumerator and framerateDenominator, else if "initializeFromSource" is selected then the output video frame rate will be set equal to the input video frame rate of the first input.
        public let framerateControl: H264FramerateControl?
        /// Framerate denominator.
        public let framerateDenominator: Int?
        /// Framerate numerator - framerate is a fraction, e.g. 24000 / 1001 = 23.976 fps.
        public let framerateNumerator: Int?
        /// If enabled, use reference B frames for GOP structures that have B frames > 1.
        public let gopBReference: H264GopBReference?
        /// Frequency of closed GOPs. In streaming applications, it is recommended that this be set to 1 so a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting.
        public let gopClosedCadence: Int?
        /// Number of B-frames between reference frames.
        public let gopNumBFrames: Int?
        /// GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.
        /// If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to 1.
        /// If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.
        public let gopSize: Double?
        /// Indicates if the gopSize is specified in frames or seconds. If seconds the system will convert the gopSize into a frame count at run time.
        public let gopSizeUnits: H264GopSizeUnits?
        /// H.264 Level.
        public let level: H264Level?
        /// Amount of lookahead. A value of low can decrease latency and memory usage, while high can produce better quality for certain content.
        public let lookAheadRateControl: H264LookAheadRateControl?
        /// For QVBR: See the tooltip for Quality level
        /// For VBR: Set the maximum bitrate in order to accommodate expected spikes in the complexity of the video.
        public let maxBitrate: Int?
        /// Only meaningful if sceneChangeDetect is set to enabled.  Defaults to 5 if multiplex rate control is used.  Enforces separation between repeated (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the scene change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval. The normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size + Min-I-interval - 1
        public let minIInterval: Int?
        /// Number of reference frames to use. The encoder may use more than requested if using B-frames and/or interlaced encoding.
        public let numRefFrames: Int?
        /// This field indicates how the output pixel aspect ratio is specified.  If "specified" is selected then the output video pixel aspect ratio is determined by parNumerator and parDenominator, else if "initializeFromSource" is selected then the output pixsel aspect ratio will be set equal to the input video pixel aspect ratio of the first input.
        public let parControl: H264ParControl?
        /// Pixel Aspect Ratio denominator.
        public let parDenominator: Int?
        /// Pixel Aspect Ratio numerator.
        public let parNumerator: Int?
        /// H.264 Profile.
        public let profile: H264Profile?
        /// Leave as STANDARD_QUALITY or choose a different value (which might result in additional costs to run the channel).
        /// - ENHANCED_QUALITY: Produces a slightly better video quality without an increase in the bitrate. Has an effect only when the Rate control mode is QVBR or CBR. If this channel is in a MediaLive multiplex, the value must be ENHANCED_QUALITY.
        /// - STANDARD_QUALITY: Valid for any Rate control mode.
        public let qualityLevel: H264QualityLevel?
        /// Controls the target quality for the video encode. Applies only when the rate control mode is QVBR. Set values for the QVBR quality level field and Max bitrate field that suit your most important viewing devices. Recommended values are:
        /// - Primary screen: Quality level: 8 to 10. Max bitrate: 4M
        /// - PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M
        /// - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M
        public let qvbrQualityLevel: Int?
        /// Rate control mode.
        /// QVBR: Quality will match the specified quality level except when it is constrained by the
        /// maximum bitrate.  Recommended if you or your viewers pay for bandwidth.
        /// VBR: Quality and bitrate vary, depending on the video complexity. Recommended instead of QVBR
        /// if you want to maintain a specific average bitrate over the duration of the channel.
        /// CBR: Quality varies, depending on the video complexity. Recommended only if you distribute
        /// your assets to devices that cannot handle variable bitrates.
        /// Multiplex: This rate control mode is only supported (and is required) when the video is being
        /// delivered to a MediaLive Multiplex in which case the rate control configuration is controlled
        /// by the properties within the Multiplex Program.
        public let rateControlMode: H264RateControlMode?
        /// Sets the scan type of the output to progressive or top-field-first interlaced.
        public let scanType: H264ScanType?
        /// Scene change detection.
        /// - On: inserts I-frames when scene change is detected.
        /// - Off: does not force an I-frame when scene change is detected.
        public let sceneChangeDetect: H264SceneChangeDetect?
        /// Number of slices per picture. Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures.
        /// This field is optional; when no value is specified the encoder will choose the number of slices based on encode resolution.
        public let slices: Int?
        /// Softness. Selects quantizer matrix, larger values reduce high-frequency content in the encoded image.
        public let softness: Int?
        /// If set to enabled, adjust quantization within each frame based on spatial variation of content complexity.
        public let spatialAq: H264SpatialAq?
        /// If set to fixed, use gopNumBFrames B-frames per sub-GOP. If set to dynamic, optimize the number of B-frames used for each sub-GOP to improve visual quality.
        public let subgopLength: H264SubGopLength?
        /// Produces a bitstream compliant with SMPTE RP-2027.
        public let syntax: H264Syntax?
        /// If set to enabled, adjust quantization within each frame based on temporal variation of content complexity.
        public let temporalAq: H264TemporalAq?
        /// Determines how timecodes should be inserted into the video elementary stream.
        /// - 'disabled': Do not include timecodes
        /// - 'picTimingSei': Pass through picture timing SEI messages from the source specified in Timecode Config
        public let timecodeInsertion: H264TimecodeInsertionBehavior?

        public init(adaptiveQuantization: H264AdaptiveQuantization? = nil, afdSignaling: AfdSignaling? = nil, bitrate: Int? = nil, bufFillPct: Int? = nil, bufSize: Int? = nil, colorMetadata: H264ColorMetadata? = nil, colorSpaceSettings: H264ColorSpaceSettings? = nil, entropyEncoding: H264EntropyEncoding? = nil, filterSettings: H264FilterSettings? = nil, fixedAfd: FixedAfd? = nil, flickerAq: H264FlickerAq? = nil, forceFieldPictures: H264ForceFieldPictures? = nil, framerateControl: H264FramerateControl? = nil, framerateDenominator: Int? = nil, framerateNumerator: Int? = nil, gopBReference: H264GopBReference? = nil, gopClosedCadence: Int? = nil, gopNumBFrames: Int? = nil, gopSize: Double? = nil, gopSizeUnits: H264GopSizeUnits? = nil, level: H264Level? = nil, lookAheadRateControl: H264LookAheadRateControl? = nil, maxBitrate: Int? = nil, minIInterval: Int? = nil, numRefFrames: Int? = nil, parControl: H264ParControl? = nil, parDenominator: Int? = nil, parNumerator: Int? = nil, profile: H264Profile? = nil, qualityLevel: H264QualityLevel? = nil, qvbrQualityLevel: Int? = nil, rateControlMode: H264RateControlMode? = nil, scanType: H264ScanType? = nil, sceneChangeDetect: H264SceneChangeDetect? = nil, slices: Int? = nil, softness: Int? = nil, spatialAq: H264SpatialAq? = nil, subgopLength: H264SubGopLength? = nil, syntax: H264Syntax? = nil, temporalAq: H264TemporalAq? = nil, timecodeInsertion: H264TimecodeInsertionBehavior? = nil) {
            self.adaptiveQuantization = adaptiveQuantization
            self.afdSignaling = afdSignaling
            self.bitrate = bitrate
            self.bufFillPct = bufFillPct
            self.bufSize = bufSize
            self.colorMetadata = colorMetadata
            self.colorSpaceSettings = colorSpaceSettings
            self.entropyEncoding = entropyEncoding
            self.filterSettings = filterSettings
            self.fixedAfd = fixedAfd
            self.flickerAq = flickerAq
            self.forceFieldPictures = forceFieldPictures
            self.framerateControl = framerateControl
            self.framerateDenominator = framerateDenominator
            self.framerateNumerator = framerateNumerator
            self.gopBReference = gopBReference
            self.gopClosedCadence = gopClosedCadence
            self.gopNumBFrames = gopNumBFrames
            self.gopSize = gopSize
            self.gopSizeUnits = gopSizeUnits
            self.level = level
            self.lookAheadRateControl = lookAheadRateControl
            self.maxBitrate = maxBitrate
            self.minIInterval = minIInterval
            self.numRefFrames = numRefFrames
            self.parControl = parControl
            self.parDenominator = parDenominator
            self.parNumerator = parNumerator
            self.profile = profile
            self.qualityLevel = qualityLevel
            self.qvbrQualityLevel = qvbrQualityLevel
            self.rateControlMode = rateControlMode
            self.scanType = scanType
            self.sceneChangeDetect = sceneChangeDetect
            self.slices = slices
            self.softness = softness
            self.spatialAq = spatialAq
            self.subgopLength = subgopLength
            self.syntax = syntax
            self.temporalAq = temporalAq
            self.timecodeInsertion = timecodeInsertion
        }

        public func validate(name: String) throws {
            try self.validate(self.bitrate, name: "bitrate", parent: name, min: 1000)
            try self.validate(self.bufFillPct, name: "bufFillPct", parent: name, max: 100)
            try self.validate(self.bufFillPct, name: "bufFillPct", parent: name, min: 0)
            try self.validate(self.bufSize, name: "bufSize", parent: name, min: 0)
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, min: 1)
            try self.validate(self.framerateNumerator, name: "framerateNumerator", parent: name, min: 1)
            try self.validate(self.gopClosedCadence, name: "gopClosedCadence", parent: name, min: 0)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, max: 7)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, min: 0)
            try self.validate(self.maxBitrate, name: "maxBitrate", parent: name, min: 1000)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, max: 30)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, min: 0)
            try self.validate(self.numRefFrames, name: "numRefFrames", parent: name, max: 6)
            try self.validate(self.numRefFrames, name: "numRefFrames", parent: name, min: 1)
            try self.validate(self.parDenominator, name: "parDenominator", parent: name, min: 1)
            try self.validate(self.parNumerator, name: "parNumerator", parent: name, min: 1)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, max: 10)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, min: 1)
            try self.validate(self.slices, name: "slices", parent: name, max: 32)
            try self.validate(self.slices, name: "slices", parent: name, min: 1)
            try self.validate(self.softness, name: "softness", parent: name, max: 128)
            try self.validate(self.softness, name: "softness", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case adaptiveQuantization
            case afdSignaling
            case bitrate
            case bufFillPct
            case bufSize
            case colorMetadata
            case colorSpaceSettings
            case entropyEncoding
            case filterSettings
            case fixedAfd
            case flickerAq
            case forceFieldPictures
            case framerateControl
            case framerateDenominator
            case framerateNumerator
            case gopBReference
            case gopClosedCadence
            case gopNumBFrames
            case gopSize
            case gopSizeUnits
            case level
            case lookAheadRateControl
            case maxBitrate
            case minIInterval
            case numRefFrames
            case parControl
            case parDenominator
            case parNumerator
            case profile
            case qualityLevel
            case qvbrQualityLevel
            case rateControlMode
            case scanType
            case sceneChangeDetect
            case slices
            case softness
            case spatialAq
            case subgopLength
            case syntax
            case temporalAq
            case timecodeInsertion
        }
    }

    public struct H265ColorSpaceSettings: AWSEncodableShape & AWSDecodableShape {
        public let colorSpacePassthroughSettings: ColorSpacePassthroughSettings?
        public let hdr10Settings: Hdr10Settings?
        public let rec601Settings: Rec601Settings?
        public let rec709Settings: Rec709Settings?

        public init(colorSpacePassthroughSettings: ColorSpacePassthroughSettings? = nil, hdr10Settings: Hdr10Settings? = nil, rec601Settings: Rec601Settings? = nil, rec709Settings: Rec709Settings? = nil) {
            self.colorSpacePassthroughSettings = colorSpacePassthroughSettings
            self.hdr10Settings = hdr10Settings
            self.rec601Settings = rec601Settings
            self.rec709Settings = rec709Settings
        }

        public func validate(name: String) throws {
            try self.hdr10Settings?.validate(name: "\(name).hdr10Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case colorSpacePassthroughSettings
            case hdr10Settings
            case rec601Settings
            case rec709Settings
        }
    }

    public struct H265FilterSettings: AWSEncodableShape & AWSDecodableShape {
        public let temporalFilterSettings: TemporalFilterSettings?

        public init(temporalFilterSettings: TemporalFilterSettings? = nil) {
            self.temporalFilterSettings = temporalFilterSettings
        }

        private enum CodingKeys: String, CodingKey {
            case temporalFilterSettings
        }
    }

    public struct H265Settings: AWSEncodableShape & AWSDecodableShape {
        /// Adaptive quantization. Allows intra-frame quantizers to vary to improve visual quality.
        public let adaptiveQuantization: H265AdaptiveQuantization?
        /// Indicates that AFD values will be written into the output stream.  If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases where multiple AFD values are valid). If set to "fixed", the AFD value will be the value configured in the fixedAfd parameter.
        public let afdSignaling: AfdSignaling?
        /// Whether or not EML should insert an Alternative Transfer Function SEI message to support backwards compatibility with non-HDR decoders and displays.
        public let alternativeTransferFunction: H265AlternativeTransferFunction?
        /// Average bitrate in bits/second. Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth output group, each output must have a unique value when its bitrate is rounded down to the nearest multiple of 1000.
        public let bitrate: Int?
        /// Size of buffer (HRD buffer model) in bits.
        public let bufSize: Int?
        /// Includes colorspace metadata in the output.
        public let colorMetadata: H265ColorMetadata?
        /// Color Space settings
        public let colorSpaceSettings: H265ColorSpaceSettings?
        /// Optional filters that you can apply to an encode.
        public let filterSettings: H265FilterSettings?
        /// Four bit AFD value to write on all frames of video in the output stream. Only valid when afdSignaling is set to 'Fixed'.
        public let fixedAfd: FixedAfd?
        /// If set to enabled, adjust quantization within each frame to reduce flicker or 'pop' on I-frames.
        public let flickerAq: H265FlickerAq?
        /// Framerate denominator.
        public let framerateDenominator: Int
        /// Framerate numerator - framerate is a fraction, e.g. 24000 / 1001 = 23.976 fps.
        public let framerateNumerator: Int
        /// Frequency of closed GOPs. In streaming applications, it is recommended that this be set to 1 so a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting.
        public let gopClosedCadence: Int?
        /// GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.
        /// If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to 1.
        /// If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.
        public let gopSize: Double?
        /// Indicates if the gopSize is specified in frames or seconds. If seconds the system will convert the gopSize into a frame count at run time.
        public let gopSizeUnits: H265GopSizeUnits?
        /// H.265 Level.
        public let level: H265Level?
        /// Amount of lookahead. A value of low can decrease latency and memory usage, while high can produce better quality for certain content.
        public let lookAheadRateControl: H265LookAheadRateControl?
        /// For QVBR: See the tooltip for Quality level
        public let maxBitrate: Int?
        /// Only meaningful if sceneChangeDetect is set to enabled.  Defaults to 5 if multiplex rate control is used.  Enforces separation between repeated (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the scene change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval. The normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size + Min-I-interval - 1
        public let minIInterval: Int?
        /// Pixel Aspect Ratio denominator.
        public let parDenominator: Int?
        /// Pixel Aspect Ratio numerator.
        public let parNumerator: Int?
        /// H.265 Profile.
        public let profile: H265Profile?
        /// Controls the target quality for the video encode. Applies only when the rate control mode is QVBR. Set values for the QVBR quality level field and Max bitrate field that suit your most important viewing devices. Recommended values are:
        /// - Primary screen: Quality level: 8 to 10. Max bitrate: 4M
        /// - PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M
        /// - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M
        public let qvbrQualityLevel: Int?
        /// Rate control mode.
        /// QVBR: Quality will match the specified quality level except when it is constrained by the
        /// maximum bitrate.  Recommended if you or your viewers pay for bandwidth.
        /// CBR: Quality varies, depending on the video complexity. Recommended only if you distribute
        /// your assets to devices that cannot handle variable bitrates.
        /// Multiplex: This rate control mode is only supported (and is required) when the video is being
        /// delivered to a MediaLive Multiplex in which case the rate control configuration is controlled
        /// by the properties within the Multiplex Program.
        public let rateControlMode: H265RateControlMode?
        /// Sets the scan type of the output to progressive or top-field-first interlaced.
        public let scanType: H265ScanType?
        /// Scene change detection.
        public let sceneChangeDetect: H265SceneChangeDetect?
        /// Number of slices per picture. Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures.
        /// This field is optional; when no value is specified the encoder will choose the number of slices based on encode resolution.
        public let slices: Int?
        /// H.265 Tier.
        public let tier: H265Tier?
        /// Determines how timecodes should be inserted into the video elementary stream.
        /// - 'disabled': Do not include timecodes
        /// - 'picTimingSei': Pass through picture timing SEI messages from the source specified in Timecode Config
        public let timecodeInsertion: H265TimecodeInsertionBehavior?

        public init(adaptiveQuantization: H265AdaptiveQuantization? = nil, afdSignaling: AfdSignaling? = nil, alternativeTransferFunction: H265AlternativeTransferFunction? = nil, bitrate: Int? = nil, bufSize: Int? = nil, colorMetadata: H265ColorMetadata? = nil, colorSpaceSettings: H265ColorSpaceSettings? = nil, filterSettings: H265FilterSettings? = nil, fixedAfd: FixedAfd? = nil, flickerAq: H265FlickerAq? = nil, framerateDenominator: Int, framerateNumerator: Int, gopClosedCadence: Int? = nil, gopSize: Double? = nil, gopSizeUnits: H265GopSizeUnits? = nil, level: H265Level? = nil, lookAheadRateControl: H265LookAheadRateControl? = nil, maxBitrate: Int? = nil, minIInterval: Int? = nil, parDenominator: Int? = nil, parNumerator: Int? = nil, profile: H265Profile? = nil, qvbrQualityLevel: Int? = nil, rateControlMode: H265RateControlMode? = nil, scanType: H265ScanType? = nil, sceneChangeDetect: H265SceneChangeDetect? = nil, slices: Int? = nil, tier: H265Tier? = nil, timecodeInsertion: H265TimecodeInsertionBehavior? = nil) {
            self.adaptiveQuantization = adaptiveQuantization
            self.afdSignaling = afdSignaling
            self.alternativeTransferFunction = alternativeTransferFunction
            self.bitrate = bitrate
            self.bufSize = bufSize
            self.colorMetadata = colorMetadata
            self.colorSpaceSettings = colorSpaceSettings
            self.filterSettings = filterSettings
            self.fixedAfd = fixedAfd
            self.flickerAq = flickerAq
            self.framerateDenominator = framerateDenominator
            self.framerateNumerator = framerateNumerator
            self.gopClosedCadence = gopClosedCadence
            self.gopSize = gopSize
            self.gopSizeUnits = gopSizeUnits
            self.level = level
            self.lookAheadRateControl = lookAheadRateControl
            self.maxBitrate = maxBitrate
            self.minIInterval = minIInterval
            self.parDenominator = parDenominator
            self.parNumerator = parNumerator
            self.profile = profile
            self.qvbrQualityLevel = qvbrQualityLevel
            self.rateControlMode = rateControlMode
            self.scanType = scanType
            self.sceneChangeDetect = sceneChangeDetect
            self.slices = slices
            self.tier = tier
            self.timecodeInsertion = timecodeInsertion
        }

        public func validate(name: String) throws {
            try self.validate(self.bitrate, name: "bitrate", parent: name, max: 40_000_000)
            try self.validate(self.bitrate, name: "bitrate", parent: name, min: 100_000)
            try self.validate(self.bufSize, name: "bufSize", parent: name, max: 80_000_000)
            try self.validate(self.bufSize, name: "bufSize", parent: name, min: 100_000)
            try self.colorSpaceSettings?.validate(name: "\(name).colorSpaceSettings")
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, max: 3003)
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, min: 1)
            try self.validate(self.framerateNumerator, name: "framerateNumerator", parent: name, min: 1)
            try self.validate(self.gopClosedCadence, name: "gopClosedCadence", parent: name, min: 0)
            try self.validate(self.maxBitrate, name: "maxBitrate", parent: name, max: 40_000_000)
            try self.validate(self.maxBitrate, name: "maxBitrate", parent: name, min: 100_000)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, max: 30)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, min: 0)
            try self.validate(self.parDenominator, name: "parDenominator", parent: name, min: 1)
            try self.validate(self.parNumerator, name: "parNumerator", parent: name, min: 1)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, max: 10)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, min: 1)
            try self.validate(self.slices, name: "slices", parent: name, max: 16)
            try self.validate(self.slices, name: "slices", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case adaptiveQuantization
            case afdSignaling
            case alternativeTransferFunction
            case bitrate
            case bufSize
            case colorMetadata
            case colorSpaceSettings
            case filterSettings
            case fixedAfd
            case flickerAq
            case framerateDenominator
            case framerateNumerator
            case gopClosedCadence
            case gopSize
            case gopSizeUnits
            case level
            case lookAheadRateControl
            case maxBitrate
            case minIInterval
            case parDenominator
            case parNumerator
            case profile
            case qvbrQualityLevel
            case rateControlMode
            case scanType
            case sceneChangeDetect
            case slices
            case tier
            case timecodeInsertion
        }
    }

    public struct Hdr10Settings: AWSEncodableShape & AWSDecodableShape {
        /// Maximum Content Light Level
        /// An integer metadata value defining the maximum light level, in nits,
        /// of any single pixel within an encoded HDR video stream or file.
        public let maxCll: Int?
        /// Maximum Frame Average Light Level
        /// An integer metadata value defining the maximum average light level, in nits,
        /// for any single frame within an encoded HDR video stream or file.
        public let maxFall: Int?

        public init(maxCll: Int? = nil, maxFall: Int? = nil) {
            self.maxCll = maxCll
            self.maxFall = maxFall
        }

        public func validate(name: String) throws {
            try self.validate(self.maxCll, name: "maxCll", parent: name, max: 32768)
            try self.validate(self.maxCll, name: "maxCll", parent: name, min: 0)
            try self.validate(self.maxFall, name: "maxFall", parent: name, max: 32768)
            try self.validate(self.maxFall, name: "maxFall", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case maxCll
            case maxFall
        }
    }

    public struct HlsAkamaiSettings: AWSEncodableShape & AWSDecodableShape {
        /// Number of seconds to wait before retrying connection to the CDN if the connection is lost.
        public let connectionRetryInterval: Int?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// Specify whether or not to use chunked transfer encoding to Akamai. User should contact Akamai to enable this feature.
        public let httpTransferMode: HlsAkamaiHttpTransferMode?
        /// Number of retry attempts that will be made before the Live Event is put into an error state.
        public let numRetries: Int?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?
        /// Salt for authenticated Akamai.
        public let salt: String?
        /// Token parameter for authenticated akamai. If not specified, _gda_ is used.
        public let token: String?

        public init(connectionRetryInterval: Int? = nil, filecacheDuration: Int? = nil, httpTransferMode: HlsAkamaiHttpTransferMode? = nil, numRetries: Int? = nil, restartDelay: Int? = nil, salt: String? = nil, token: String? = nil) {
            self.connectionRetryInterval = connectionRetryInterval
            self.filecacheDuration = filecacheDuration
            self.httpTransferMode = httpTransferMode
            self.numRetries = numRetries
            self.restartDelay = restartDelay
            self.salt = salt
            self.token = token
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, max: 600)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, max: 15)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionRetryInterval
            case filecacheDuration
            case httpTransferMode
            case numRetries
            case restartDelay
            case salt
            case token
        }
    }

    public struct HlsBasicPutSettings: AWSEncodableShape & AWSDecodableShape {
        /// Number of seconds to wait before retrying connection to the CDN if the connection is lost.
        public let connectionRetryInterval: Int?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// Number of retry attempts that will be made before the Live Event is put into an error state.
        public let numRetries: Int?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?

        public init(connectionRetryInterval: Int? = nil, filecacheDuration: Int? = nil, numRetries: Int? = nil, restartDelay: Int? = nil) {
            self.connectionRetryInterval = connectionRetryInterval
            self.filecacheDuration = filecacheDuration
            self.numRetries = numRetries
            self.restartDelay = restartDelay
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, max: 600)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, max: 15)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionRetryInterval
            case filecacheDuration
            case numRetries
            case restartDelay
        }
    }

    public struct HlsCdnSettings: AWSEncodableShape & AWSDecodableShape {
        public let hlsAkamaiSettings: HlsAkamaiSettings?
        public let hlsBasicPutSettings: HlsBasicPutSettings?
        public let hlsMediaStoreSettings: HlsMediaStoreSettings?
        public let hlsWebdavSettings: HlsWebdavSettings?

        public init(hlsAkamaiSettings: HlsAkamaiSettings? = nil, hlsBasicPutSettings: HlsBasicPutSettings? = nil, hlsMediaStoreSettings: HlsMediaStoreSettings? = nil, hlsWebdavSettings: HlsWebdavSettings? = nil) {
            self.hlsAkamaiSettings = hlsAkamaiSettings
            self.hlsBasicPutSettings = hlsBasicPutSettings
            self.hlsMediaStoreSettings = hlsMediaStoreSettings
            self.hlsWebdavSettings = hlsWebdavSettings
        }

        public func validate(name: String) throws {
            try self.hlsAkamaiSettings?.validate(name: "\(name).hlsAkamaiSettings")
            try self.hlsBasicPutSettings?.validate(name: "\(name).hlsBasicPutSettings")
            try self.hlsMediaStoreSettings?.validate(name: "\(name).hlsMediaStoreSettings")
            try self.hlsWebdavSettings?.validate(name: "\(name).hlsWebdavSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case hlsAkamaiSettings
            case hlsBasicPutSettings
            case hlsMediaStoreSettings
            case hlsWebdavSettings
        }
    }

    public struct HlsGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Choose one or more ad marker types to pass SCTE35 signals through to this group of Apple HLS outputs.
        public let adMarkers: [HlsAdMarkers]?
        /// A partial URI prefix that will be prepended to each output in the media .m3u8 file. Can be used if base manifest is delivered from a different URL than the main .m3u8 file.
        public let baseUrlContent: String?
        /// Optional. One value per output group.
        /// This field is required only if you are completing Base URL content A, and the downstream system has notified you that the media files for pipeline 1 of all outputs are in a location different from the media files for pipeline 0.
        public let baseUrlContent1: String?
        /// A partial URI prefix that will be prepended to each output in the media .m3u8 file. Can be used if base manifest is delivered from a different URL than the main .m3u8 file.
        public let baseUrlManifest: String?
        /// Optional. One value per output group.
        /// Complete this field only if you are completing Base URL manifest A, and the downstream system has notified you that the child manifest files for pipeline 1 of all outputs are in a location different from the child manifest files for pipeline 0.
        public let baseUrlManifest1: String?
        /// Mapping of up to 4 caption channels to caption languages.  Is only meaningful if captionLanguageSetting is set to "insert".
        public let captionLanguageMappings: [CaptionLanguageMapping]?
        /// Applies only to 608 Embedded output captions.
        /// insert: Include CLOSED-CAPTIONS lines in the manifest. Specify at least one language in the CC1 Language Code field. One CLOSED-CAPTION line is added for each Language Code you specify. Make sure to specify the languages in the order in which they appear in the original source (if the source is embedded format) or the order of the caption selectors (if the source is other than embedded). Otherwise, languages in the manifest will not match up properly with the output captions.
        /// none: Include CLOSED-CAPTIONS=NONE line in the manifest.
        /// omit: Omit any CLOSED-CAPTIONS line from the manifest.
        public let captionLanguageSetting: HlsCaptionLanguageSetting?
        /// When set to "disabled", sets the #EXT-X-ALLOW-CACHE:no tag in the manifest, which prevents clients from saving media segments for later replay.
        public let clientCache: HlsClientCache?
        /// Specification to use (RFC-6381 or the default RFC-4281) during m3u8 playlist generation.
        public let codecSpecification: HlsCodecSpecification?
        /// For use with encryptionType. This is a 128-bit, 16-byte hex value represented by a 32-character text string. If ivSource is set to "explicit" then this parameter is required and is used as the IV for encryption.
        public let constantIv: String?
        /// A directory or HTTP destination for the HLS segments, manifest files, and encryption keys (if enabled).
        public let destination: OutputLocationRef
        /// Place segments in subdirectories.
        public let directoryStructure: HlsDirectoryStructure?
        /// Specifies whether to insert EXT-X-DISCONTINUITY tags in the HLS child manifests for this output group.
        /// Typically, choose Insert because these tags are required in the manifest (according to the HLS specification) and serve an important purpose.
        /// Choose Never Insert only if the downstream system is doing real-time failover (without using the MediaLive automatic failover feature) and only if that downstream system has advised you to exclude the tags.
        public let discontinuityTags: HlsDiscontinuityTags?
        /// Encrypts the segments with the given encryption scheme.  Exclude this parameter if no encryption is desired.
        public let encryptionType: HlsEncryptionType?
        /// Parameters that control interactions with the CDN.
        public let hlsCdnSettings: HlsCdnSettings?
        /// State of HLS ID3 Segment Tagging
        public let hlsId3SegmentTagging: HlsId3SegmentTaggingState?
        /// DISABLED: Do not create an I-frame-only manifest, but do create the master and media manifests (according to the Output Selection field).
        /// STANDARD: Create an I-frame-only manifest for each output that contains video, as well as the other manifests (according to the Output Selection field). The I-frame manifest contains a #EXT-X-I-FRAMES-ONLY tag to indicate it is I-frame only, and one or more #EXT-X-BYTERANGE entries identifying the I-frame position. For example, #EXT-X-BYTERANGE:160364@1461888"
        public let iFrameOnlyPlaylists: IFrameOnlyPlaylistType?
        /// Specifies whether to include the final (incomplete) segment in the media output when the pipeline stops producing output because of a channel stop, a channel pause or a loss of input to the pipeline.
        /// Auto means that MediaLive decides whether to include the final segment, depending on the channel class and the types of output groups.
        /// Suppress means to never include the incomplete segment. We recommend you choose Auto and let MediaLive control the behavior.
        public let incompleteSegmentBehavior: HlsIncompleteSegmentBehavior?
        /// Applies only if Mode field is LIVE.
        /// Specifies the maximum number of segments in the media manifest file. After this maximum, older segments are removed from the media manifest. This number must be smaller than the number in the Keep Segments field.
        public let indexNSegments: Int?
        /// Parameter that control output group behavior on input loss.
        public let inputLossAction: InputLossActionForHlsOut?
        /// For use with encryptionType. The IV (Initialization Vector) is a 128-bit number used in conjunction with the key for encrypting blocks. If set to "include", IV is listed in the manifest, otherwise the IV is not in the manifest.
        public let ivInManifest: HlsIvInManifest?
        /// For use with encryptionType. The IV (Initialization Vector) is a 128-bit number used in conjunction with the key for encrypting blocks. If this setting is "followsSegmentNumber", it will cause the IV to change every segment (to match the segment number). If this is set to "explicit", you must enter a constantIv value.
        public let ivSource: HlsIvSource?
        /// Applies only if Mode field is LIVE.
        /// Specifies the number of media segments to retain in the destination directory. This number should be bigger than indexNSegments (Num segments). We recommend (value = (2 x indexNsegments) + 1).
        /// If this "keep segments" number is too low, the following might happen: the player is still reading a media manifest file that lists this segment, but that segment has been removed from the destination directory (as directed by indexNSegments). This situation would result in a 404 HTTP error on the player.
        public let keepSegments: Int?
        /// The value specifies how the key is represented in the resource identified by the URI.  If parameter is absent, an implicit value of "identity" is used.  A reverse DNS string can also be given.
        public let keyFormat: String?
        /// Either a single positive integer version value or a slash delimited list of version values (1/2/3).
        public let keyFormatVersions: String?
        /// The key provider settings.
        public let keyProviderSettings: KeyProviderSettings?
        /// When set to gzip, compresses HLS playlist.
        public let manifestCompression: HlsManifestCompression?
        /// Indicates whether the output manifest should use floating point or integer values for segment duration.
        public let manifestDurationFormat: HlsManifestDurationFormat?
        /// When set, minimumSegmentLength is enforced by looking ahead and back within the specified range for a nearby avail and extending the segment size if needed.
        public let minSegmentLength: Int?
        /// If "vod", all segments are indexed and kept permanently in the destination and manifest. If "live", only the number segments specified in keepSegments and indexNSegments are kept; newer segments replace older segments, which may prevent players from rewinding all the way to the beginning of the event.
        /// VOD mode uses HLS EXT-X-PLAYLIST-TYPE of EVENT while the channel is running, converting it to a "VOD" type manifest on completion of the stream.
        public let mode: HlsMode?
        /// MANIFESTS_AND_SEGMENTS: Generates manifests (master manifest, if applicable, and media manifests) for this output group.
        /// VARIANT_MANIFESTS_AND_SEGMENTS: Generates media manifests for this output group, but not a master manifest.
        /// SEGMENTS_ONLY: Does not generate any manifests for this output group.
        public let outputSelection: HlsOutputSelection?
        /// Includes or excludes EXT-X-PROGRAM-DATE-TIME tag in .m3u8 manifest files. The value is calculated as follows: either the program date and time are initialized using the input timecode source, or the time is initialized using the input timecode source and the date is initialized using the timestampOffset.
        public let programDateTime: HlsProgramDateTime?
        /// Period of insertion of EXT-X-PROGRAM-DATE-TIME entry, in seconds.
        public let programDateTimePeriod: Int?
        /// ENABLED: The master manifest (.m3u8 file) for each pipeline includes information about both pipelines: first its own media files, then the media files of the other pipeline. This feature allows playout device that support stale manifest detection to switch from one manifest to the other, when the current manifest seems to be stale. There are still two destinations and two master manifests, but both master manifests reference the media files from both pipelines.
        /// DISABLED: The master manifest (.m3u8 file) for each pipeline includes information about its own pipeline only.
        /// For an HLS output group with MediaPackage as the destination, the DISABLED behavior is always followed. MediaPackage regenerates the manifests it serves to players so a redundant manifest from MediaLive is irrelevant.
        public let redundantManifest: HlsRedundantManifest?
        /// useInputSegmentation has been deprecated. The configured segment size is always used.
        public let segmentationMode: HlsSegmentationMode?
        /// Length of MPEG-2 Transport Stream segments to create (in seconds). Note that segments will end on the next keyframe after this number of seconds, so actual segment length may be longer.
        public let segmentLength: Int?
        /// Number of segments to write to a subdirectory before starting a new one. directoryStructure must be subdirectoryPerStream for this setting to have an effect.
        public let segmentsPerSubdirectory: Int?
        /// Include or exclude RESOLUTION attribute for video in EXT-X-STREAM-INF tag of variant manifest.
        public let streamInfResolution: HlsStreamInfResolution?
        /// Indicates ID3 frame that has the timecode.
        public let timedMetadataId3Frame: HlsTimedMetadataId3Frame?
        /// Timed Metadata interval in seconds.
        public let timedMetadataId3Period: Int?
        /// Provides an extra millisecond delta offset to fine tune the timestamps.
        public let timestampDeltaMilliseconds: Int?
        /// SEGMENTED_FILES: Emit the program as segments - multiple .ts media files.
        /// SINGLE_FILE: Applies only if Mode field is VOD. Emit the program as a single .ts media file. The media manifest includes #EXT-X-BYTERANGE tags to index segments for playback. A typical use for this value is when sending the output to AWS Elemental MediaConvert, which can accept only a single media file. Playback while the channel is running is not guaranteed due to HTTP server caching.
        public let tsFileMode: HlsTsFileMode?

        public init(adMarkers: [HlsAdMarkers]? = nil, baseUrlContent: String? = nil, baseUrlContent1: String? = nil, baseUrlManifest: String? = nil, baseUrlManifest1: String? = nil, captionLanguageMappings: [CaptionLanguageMapping]? = nil, captionLanguageSetting: HlsCaptionLanguageSetting? = nil, clientCache: HlsClientCache? = nil, codecSpecification: HlsCodecSpecification? = nil, constantIv: String? = nil, destination: OutputLocationRef, directoryStructure: HlsDirectoryStructure? = nil, discontinuityTags: HlsDiscontinuityTags? = nil, encryptionType: HlsEncryptionType? = nil, hlsCdnSettings: HlsCdnSettings? = nil, hlsId3SegmentTagging: HlsId3SegmentTaggingState? = nil, iFrameOnlyPlaylists: IFrameOnlyPlaylistType? = nil, incompleteSegmentBehavior: HlsIncompleteSegmentBehavior? = nil, indexNSegments: Int? = nil, inputLossAction: InputLossActionForHlsOut? = nil, ivInManifest: HlsIvInManifest? = nil, ivSource: HlsIvSource? = nil, keepSegments: Int? = nil, keyFormat: String? = nil, keyFormatVersions: String? = nil, keyProviderSettings: KeyProviderSettings? = nil, manifestCompression: HlsManifestCompression? = nil, manifestDurationFormat: HlsManifestDurationFormat? = nil, minSegmentLength: Int? = nil, mode: HlsMode? = nil, outputSelection: HlsOutputSelection? = nil, programDateTime: HlsProgramDateTime? = nil, programDateTimePeriod: Int? = nil, redundantManifest: HlsRedundantManifest? = nil, segmentationMode: HlsSegmentationMode? = nil, segmentLength: Int? = nil, segmentsPerSubdirectory: Int? = nil, streamInfResolution: HlsStreamInfResolution? = nil, timedMetadataId3Frame: HlsTimedMetadataId3Frame? = nil, timedMetadataId3Period: Int? = nil, timestampDeltaMilliseconds: Int? = nil, tsFileMode: HlsTsFileMode? = nil) {
            self.adMarkers = adMarkers
            self.baseUrlContent = baseUrlContent
            self.baseUrlContent1 = baseUrlContent1
            self.baseUrlManifest = baseUrlManifest
            self.baseUrlManifest1 = baseUrlManifest1
            self.captionLanguageMappings = captionLanguageMappings
            self.captionLanguageSetting = captionLanguageSetting
            self.clientCache = clientCache
            self.codecSpecification = codecSpecification
            self.constantIv = constantIv
            self.destination = destination
            self.directoryStructure = directoryStructure
            self.discontinuityTags = discontinuityTags
            self.encryptionType = encryptionType
            self.hlsCdnSettings = hlsCdnSettings
            self.hlsId3SegmentTagging = hlsId3SegmentTagging
            self.iFrameOnlyPlaylists = iFrameOnlyPlaylists
            self.incompleteSegmentBehavior = incompleteSegmentBehavior
            self.indexNSegments = indexNSegments
            self.inputLossAction = inputLossAction
            self.ivInManifest = ivInManifest
            self.ivSource = ivSource
            self.keepSegments = keepSegments
            self.keyFormat = keyFormat
            self.keyFormatVersions = keyFormatVersions
            self.keyProviderSettings = keyProviderSettings
            self.manifestCompression = manifestCompression
            self.manifestDurationFormat = manifestDurationFormat
            self.minSegmentLength = minSegmentLength
            self.mode = mode
            self.outputSelection = outputSelection
            self.programDateTime = programDateTime
            self.programDateTimePeriod = programDateTimePeriod
            self.redundantManifest = redundantManifest
            self.segmentationMode = segmentationMode
            self.segmentLength = segmentLength
            self.segmentsPerSubdirectory = segmentsPerSubdirectory
            self.streamInfResolution = streamInfResolution
            self.timedMetadataId3Frame = timedMetadataId3Frame
            self.timedMetadataId3Period = timedMetadataId3Period
            self.timestampDeltaMilliseconds = timestampDeltaMilliseconds
            self.tsFileMode = tsFileMode
        }

        public func validate(name: String) throws {
            try self.captionLanguageMappings?.forEach {
                try $0.validate(name: "\(name).captionLanguageMappings[]")
            }
            try self.validate(self.constantIv, name: "constantIv", parent: name, max: 32)
            try self.validate(self.constantIv, name: "constantIv", parent: name, min: 32)
            try self.hlsCdnSettings?.validate(name: "\(name).hlsCdnSettings")
            try self.validate(self.indexNSegments, name: "indexNSegments", parent: name, min: 3)
            try self.validate(self.keepSegments, name: "keepSegments", parent: name, min: 1)
            try self.keyProviderSettings?.validate(name: "\(name).keyProviderSettings")
            try self.validate(self.minSegmentLength, name: "minSegmentLength", parent: name, min: 0)
            try self.validate(self.programDateTimePeriod, name: "programDateTimePeriod", parent: name, max: 3600)
            try self.validate(self.programDateTimePeriod, name: "programDateTimePeriod", parent: name, min: 0)
            try self.validate(self.segmentLength, name: "segmentLength", parent: name, min: 1)
            try self.validate(self.segmentsPerSubdirectory, name: "segmentsPerSubdirectory", parent: name, min: 1)
            try self.validate(self.timedMetadataId3Period, name: "timedMetadataId3Period", parent: name, min: 0)
            try self.validate(self.timestampDeltaMilliseconds, name: "timestampDeltaMilliseconds", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case adMarkers
            case baseUrlContent
            case baseUrlContent1
            case baseUrlManifest
            case baseUrlManifest1
            case captionLanguageMappings
            case captionLanguageSetting
            case clientCache
            case codecSpecification
            case constantIv
            case destination
            case directoryStructure
            case discontinuityTags
            case encryptionType
            case hlsCdnSettings
            case hlsId3SegmentTagging
            case iFrameOnlyPlaylists
            case incompleteSegmentBehavior
            case indexNSegments
            case inputLossAction
            case ivInManifest
            case ivSource
            case keepSegments
            case keyFormat
            case keyFormatVersions
            case keyProviderSettings
            case manifestCompression
            case manifestDurationFormat
            case minSegmentLength
            case mode
            case outputSelection
            case programDateTime
            case programDateTimePeriod
            case redundantManifest
            case segmentationMode
            case segmentLength
            case segmentsPerSubdirectory
            case streamInfResolution
            case timedMetadataId3Frame
            case timedMetadataId3Period
            case timestampDeltaMilliseconds
            case tsFileMode
        }
    }

    public struct HlsId3SegmentTaggingScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// ID3 tag to insert into each segment. Supports special keyword identifiers to substitute in segment-related values.\nSupported keyword identifiers: https://docs.aws.amazon.com/medialive/latest/ug/variable-data-identifiers.html
        public let tag: String

        public init(tag: String) {
            self.tag = tag
        }

        private enum CodingKeys: String, CodingKey {
            case tag
        }
    }

    public struct HlsInputSettings: AWSEncodableShape & AWSDecodableShape {
        /// When specified the HLS stream with the m3u8 BANDWIDTH that most closely matches this value will be chosen, otherwise the highest bandwidth stream in the m3u8 will be chosen.  The bitrate is specified in bits per second, as in an HLS manifest.
        public let bandwidth: Int?
        /// When specified, reading of the HLS input will begin this many buffer segments from the end (most recently written segment).  When not specified, the HLS input will begin with the first segment specified in the m3u8.
        public let bufferSegments: Int?
        /// The number of consecutive times that attempts to read a manifest or segment must fail before the input is considered unavailable.
        public let retries: Int?
        /// The number of seconds between retries when an attempt to read a manifest or segment fails.
        public let retryInterval: Int?

        public init(bandwidth: Int? = nil, bufferSegments: Int? = nil, retries: Int? = nil, retryInterval: Int? = nil) {
            self.bandwidth = bandwidth
            self.bufferSegments = bufferSegments
            self.retries = retries
            self.retryInterval = retryInterval
        }

        public func validate(name: String) throws {
            try self.validate(self.bandwidth, name: "bandwidth", parent: name, min: 0)
            try self.validate(self.bufferSegments, name: "bufferSegments", parent: name, min: 0)
            try self.validate(self.retries, name: "retries", parent: name, min: 0)
            try self.validate(self.retryInterval, name: "retryInterval", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case bandwidth
            case bufferSegments
            case retries
            case retryInterval
        }
    }

    public struct HlsMediaStoreSettings: AWSEncodableShape & AWSDecodableShape {
        /// Number of seconds to wait before retrying connection to the CDN if the connection is lost.
        public let connectionRetryInterval: Int?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// When set to temporal, output files are stored in non-persistent memory for faster reading and writing.
        public let mediaStoreStorageClass: HlsMediaStoreStorageClass?
        /// Number of retry attempts that will be made before the Live Event is put into an error state.
        public let numRetries: Int?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?

        public init(connectionRetryInterval: Int? = nil, filecacheDuration: Int? = nil, mediaStoreStorageClass: HlsMediaStoreStorageClass? = nil, numRetries: Int? = nil, restartDelay: Int? = nil) {
            self.connectionRetryInterval = connectionRetryInterval
            self.filecacheDuration = filecacheDuration
            self.mediaStoreStorageClass = mediaStoreStorageClass
            self.numRetries = numRetries
            self.restartDelay = restartDelay
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, max: 600)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, max: 15)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionRetryInterval
            case filecacheDuration
            case mediaStoreStorageClass
            case numRetries
            case restartDelay
        }
    }

    public struct HlsOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Only applicable when this output is referencing an H.265 video description.
        /// Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
        public let h265PackagingType: HlsH265PackagingType?
        /// Settings regarding the underlying stream. These settings are different for audio-only outputs.
        public let hlsSettings: HlsSettings
        /// String concatenated to the end of the destination filename. Accepts \"Format Identifiers\":#formatIdentifierParameters.
        public let nameModifier: String?
        /// String concatenated to end of segment filenames.
        public let segmentModifier: String?

        public init(h265PackagingType: HlsH265PackagingType? = nil, hlsSettings: HlsSettings, nameModifier: String? = nil, segmentModifier: String? = nil) {
            self.h265PackagingType = h265PackagingType
            self.hlsSettings = hlsSettings
            self.nameModifier = nameModifier
            self.segmentModifier = segmentModifier
        }

        public func validate(name: String) throws {
            try self.hlsSettings.validate(name: "\(name).hlsSettings")
            try self.validate(self.nameModifier, name: "nameModifier", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case h265PackagingType
            case hlsSettings
            case nameModifier
            case segmentModifier
        }
    }

    public struct HlsSettings: AWSEncodableShape & AWSDecodableShape {
        public let audioOnlyHlsSettings: AudioOnlyHlsSettings?
        public let fmp4HlsSettings: Fmp4HlsSettings?
        public let frameCaptureHlsSettings: FrameCaptureHlsSettings?
        public let standardHlsSettings: StandardHlsSettings?

        public init(audioOnlyHlsSettings: AudioOnlyHlsSettings? = nil, fmp4HlsSettings: Fmp4HlsSettings? = nil, frameCaptureHlsSettings: FrameCaptureHlsSettings? = nil, standardHlsSettings: StandardHlsSettings? = nil) {
            self.audioOnlyHlsSettings = audioOnlyHlsSettings
            self.fmp4HlsSettings = fmp4HlsSettings
            self.frameCaptureHlsSettings = frameCaptureHlsSettings
            self.standardHlsSettings = standardHlsSettings
        }

        public func validate(name: String) throws {
            try self.standardHlsSettings?.validate(name: "\(name).standardHlsSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioOnlyHlsSettings
            case fmp4HlsSettings
            case frameCaptureHlsSettings
            case standardHlsSettings
        }
    }

    public struct HlsTimedMetadataScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Base64 string formatted according to the ID3 specification: http://id3.org/id3v2.4.0-structure
        public let id3: String

        public init(id3: String) {
            self.id3 = id3
        }

        private enum CodingKeys: String, CodingKey {
            case id3
        }
    }

    public struct HlsWebdavSettings: AWSEncodableShape & AWSDecodableShape {
        /// Number of seconds to wait before retrying connection to the CDN if the connection is lost.
        public let connectionRetryInterval: Int?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// Specify whether or not to use chunked transfer encoding to WebDAV.
        public let httpTransferMode: HlsWebdavHttpTransferMode?
        /// Number of retry attempts that will be made before the Live Event is put into an error state.
        public let numRetries: Int?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?

        public init(connectionRetryInterval: Int? = nil, filecacheDuration: Int? = nil, httpTransferMode: HlsWebdavHttpTransferMode? = nil, numRetries: Int? = nil, restartDelay: Int? = nil) {
            self.connectionRetryInterval = connectionRetryInterval
            self.filecacheDuration = filecacheDuration
            self.httpTransferMode = httpTransferMode
            self.numRetries = numRetries
            self.restartDelay = restartDelay
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, max: 600)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, max: 15)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionRetryInterval
            case filecacheDuration
            case httpTransferMode
            case numRetries
            case restartDelay
        }
    }

    public struct ImmediateModeScheduleActionStartSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Input: AWSDecodableShape {
        /// The Unique ARN of the input (generated, immutable).
        public let arn: String?
        /// A list of channel IDs that that input is attached to (currently an input can only be attached to one channel).
        public let attachedChannels: [String]?
        /// A list of the destinations of the input (PUSH-type).
        public let destinations: [InputDestination]?
        /// The generated ID of the input (unique for user account, immutable).
        public let id: String?
        /// STANDARD - MediaLive expects two sources to be connected to this input. If the channel is also STANDARD, both sources will be ingested. If the channel is SINGLE_PIPELINE, only the first source will be ingested; the second source will always be ignored, even if the first source fails.
        /// SINGLE_PIPELINE - You can connect only one source to this input. If the ChannelClass is also  SINGLE_PIPELINE, this value is valid. If the ChannelClass is STANDARD, this value is not valid because the channel requires two sources in the input.
        public let inputClass: InputClass?
        /// Settings for the input devices.
        public let inputDevices: [InputDeviceSettings]?
        /// A list of IDs for all Inputs which are partners of this one.
        public let inputPartnerIds: [String]?
        /// Certain pull input sources can be dynamic, meaning that they can have their URL's dynamically changes
        /// during input switch actions. Presently, this functionality only works with MP4_FILE inputs.
        public let inputSourceType: InputSourceType?
        /// A list of MediaConnect Flows for this input.
        public let mediaConnectFlows: [MediaConnectFlow]?
        /// The user-assigned name (This is a mutable value).
        public let name: String?
        /// The Amazon Resource Name (ARN) of the role this input assumes during and after creation.
        public let roleArn: String?
        /// A list of IDs for all the Input Security Groups attached to the input.
        public let securityGroups: [String]?
        /// A list of the sources of the input (PULL-type).
        public let sources: [InputSource]?
        public let state: InputState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        public let type: InputType?

        public init(arn: String? = nil, attachedChannels: [String]? = nil, destinations: [InputDestination]? = nil, id: String? = nil, inputClass: InputClass? = nil, inputDevices: [InputDeviceSettings]? = nil, inputPartnerIds: [String]? = nil, inputSourceType: InputSourceType? = nil, mediaConnectFlows: [MediaConnectFlow]? = nil, name: String? = nil, roleArn: String? = nil, securityGroups: [String]? = nil, sources: [InputSource]? = nil, state: InputState? = nil, tags: [String: String]? = nil, type: InputType? = nil) {
            self.arn = arn
            self.attachedChannels = attachedChannels
            self.destinations = destinations
            self.id = id
            self.inputClass = inputClass
            self.inputDevices = inputDevices
            self.inputPartnerIds = inputPartnerIds
            self.inputSourceType = inputSourceType
            self.mediaConnectFlows = mediaConnectFlows
            self.name = name
            self.roleArn = roleArn
            self.securityGroups = securityGroups
            self.sources = sources
            self.state = state
            self.tags = tags
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case attachedChannels
            case destinations
            case id
            case inputClass
            case inputDevices
            case inputPartnerIds
            case inputSourceType
            case mediaConnectFlows
            case name
            case roleArn
            case securityGroups
            case sources
            case state
            case tags
            case type
        }
    }

    public struct InputAttachment: AWSEncodableShape & AWSDecodableShape {
        /// User-specified settings for defining what the conditions are for declaring the input unhealthy and failing over to a different input.
        public let automaticInputFailoverSettings: AutomaticInputFailoverSettings?
        /// User-specified name for the attachment. This is required if the user wants to use this input in an input switch action.
        public let inputAttachmentName: String?
        /// The ID of the input
        public let inputId: String?
        /// Settings of an input (caption selector, etc.)
        public let inputSettings: InputSettings?

        public init(automaticInputFailoverSettings: AutomaticInputFailoverSettings? = nil, inputAttachmentName: String? = nil, inputId: String? = nil, inputSettings: InputSettings? = nil) {
            self.automaticInputFailoverSettings = automaticInputFailoverSettings
            self.inputAttachmentName = inputAttachmentName
            self.inputId = inputId
            self.inputSettings = inputSettings
        }

        public func validate(name: String) throws {
            try self.automaticInputFailoverSettings?.validate(name: "\(name).automaticInputFailoverSettings")
            try self.inputSettings?.validate(name: "\(name).inputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case automaticInputFailoverSettings
            case inputAttachmentName
            case inputId
            case inputSettings
        }
    }

    public struct InputChannelLevel: AWSEncodableShape & AWSDecodableShape {
        /// Remixing value. Units are in dB and acceptable values are within the range from -60 (mute) and 6 dB.
        public let gain: Int
        /// The index of the input channel used as a source.
        public let inputChannel: Int

        public init(gain: Int, inputChannel: Int) {
            self.gain = gain
            self.inputChannel = inputChannel
        }

        public func validate(name: String) throws {
            try self.validate(self.gain, name: "gain", parent: name, max: 6)
            try self.validate(self.gain, name: "gain", parent: name, min: -60)
            try self.validate(self.inputChannel, name: "inputChannel", parent: name, max: 15)
            try self.validate(self.inputChannel, name: "inputChannel", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case gain
            case inputChannel
        }
    }

    public struct InputClippingSettings: AWSEncodableShape & AWSDecodableShape {
        /// The source of the timecodes in the source being clipped.
        public let inputTimecodeSource: InputTimecodeSource
        /// Settings to identify the start of the clip.
        public let startTimecode: StartTimecode?
        /// Settings to identify the end of the clip.
        public let stopTimecode: StopTimecode?

        public init(inputTimecodeSource: InputTimecodeSource, startTimecode: StartTimecode? = nil, stopTimecode: StopTimecode? = nil) {
            self.inputTimecodeSource = inputTimecodeSource
            self.startTimecode = startTimecode
            self.stopTimecode = stopTimecode
        }

        private enum CodingKeys: String, CodingKey {
            case inputTimecodeSource
            case startTimecode
            case stopTimecode
        }
    }

    public struct InputDestination: AWSDecodableShape {
        /// The system-generated static IP address of endpoint.
        /// It remains fixed for the lifetime of the input.
        public let ip: String?
        /// The port number for the input.
        public let port: String?
        /// This represents the endpoint that the customer stream will be
        /// pushed to.
        public let url: String?
        public let vpc: InputDestinationVpc?

        public init(ip: String? = nil, port: String? = nil, url: String? = nil, vpc: InputDestinationVpc? = nil) {
            self.ip = ip
            self.port = port
            self.url = url
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case ip
            case port
            case url
            case vpc
        }
    }

    public struct InputDestinationRequest: AWSEncodableShape {
        /// A unique name for the location the RTMP stream is being pushed
        /// to.
        public let streamName: String?

        public init(streamName: String? = nil) {
            self.streamName = streamName
        }

        private enum CodingKeys: String, CodingKey {
            case streamName
        }
    }

    public struct InputDestinationVpc: AWSDecodableShape {
        /// The availability zone of the Input destination.
        public let availabilityZone: String?
        /// The network interface ID of the Input destination in the VPC.
        public let networkInterfaceId: String?

        public init(availabilityZone: String? = nil, networkInterfaceId: String? = nil) {
            self.availabilityZone = availabilityZone
            self.networkInterfaceId = networkInterfaceId
        }

        private enum CodingKeys: String, CodingKey {
            case availabilityZone
            case networkInterfaceId
        }
    }

    public struct InputDeviceConfigurableSettings: AWSEncodableShape {
        /// The input source that you want to use. If the device has a source connected to only one of its input ports, or if you don't care which source the device sends, specify Auto. If the device has sources connected to both its input ports, and you want to use a specific source, specify the source.
        public let configuredInput: InputDeviceConfiguredInput?
        /// The maximum bitrate in bits per second. Set a value here to throttle the bitrate of the source video.
        public let maxBitrate: Int?

        public init(configuredInput: InputDeviceConfiguredInput? = nil, maxBitrate: Int? = nil) {
            self.configuredInput = configuredInput
            self.maxBitrate = maxBitrate
        }

        private enum CodingKeys: String, CodingKey {
            case configuredInput
            case maxBitrate
        }
    }

    public struct InputDeviceHdSettings: AWSDecodableShape {
        /// If you specified Auto as the configured input, specifies which of the sources is currently active (SDI or HDMI).
        public let activeInput: InputDeviceActiveInput?
        /// The source at the input device that is currently active. You can specify this source.
        public let configuredInput: InputDeviceConfiguredInput?
        /// The state of the input device.
        public let deviceState: InputDeviceState?
        /// The frame rate of the video source.
        public let framerate: Double?
        /// The height of the video source, in pixels.
        public let height: Int?
        /// The current maximum bitrate for ingesting this source, in bits per second. You can specify this maximum.
        public let maxBitrate: Int?
        /// The scan type of the video source.
        public let scanType: InputDeviceScanType?
        /// The width of the video source, in pixels.
        public let width: Int?

        public init(activeInput: InputDeviceActiveInput? = nil, configuredInput: InputDeviceConfiguredInput? = nil, deviceState: InputDeviceState? = nil, framerate: Double? = nil, height: Int? = nil, maxBitrate: Int? = nil, scanType: InputDeviceScanType? = nil, width: Int? = nil) {
            self.activeInput = activeInput
            self.configuredInput = configuredInput
            self.deviceState = deviceState
            self.framerate = framerate
            self.height = height
            self.maxBitrate = maxBitrate
            self.scanType = scanType
            self.width = width
        }

        private enum CodingKeys: String, CodingKey {
            case activeInput
            case configuredInput
            case deviceState
            case framerate
            case height
            case maxBitrate
            case scanType
            case width
        }
    }

    public struct InputDeviceNetworkSettings: AWSDecodableShape {
        /// The DNS addresses of the input device.
        public let dnsAddresses: [String]?
        /// The network gateway IP address.
        public let gateway: String?
        /// The IP address of the input device.
        public let ipAddress: String?
        /// Specifies whether the input device has been configured (outside of MediaLive) to use a dynamic IP address assignment (DHCP) or a static IP address.
        public let ipScheme: InputDeviceIpScheme?
        /// The subnet mask of the input device.
        public let subnetMask: String?

        public init(dnsAddresses: [String]? = nil, gateway: String? = nil, ipAddress: String? = nil, ipScheme: InputDeviceIpScheme? = nil, subnetMask: String? = nil) {
            self.dnsAddresses = dnsAddresses
            self.gateway = gateway
            self.ipAddress = ipAddress
            self.ipScheme = ipScheme
            self.subnetMask = subnetMask
        }

        private enum CodingKeys: String, CodingKey {
            case dnsAddresses
            case gateway
            case ipAddress
            case ipScheme
            case subnetMask
        }
    }

    public struct InputDeviceRequest: AWSEncodableShape {
        /// The unique ID for the device.
        public let id: String?

        public init(id: String? = nil) {
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case id
        }
    }

    public struct InputDeviceSettings: AWSEncodableShape & AWSDecodableShape {
        /// The unique ID for the device.
        public let id: String?

        public init(id: String? = nil) {
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case id
        }
    }

    public struct InputDeviceSummary: AWSDecodableShape {
        /// The unique ARN of the input device.
        public let arn: String?
        /// The state of the connection between the input device and AWS.
        public let connectionState: InputDeviceConnectionState?
        /// The status of the action to synchronize the device configuration. If you change the configuration of the input device (for example, the maximum bitrate), MediaLive sends the new data to the device. The device might not update itself immediately. SYNCED means the device has updated its configuration. SYNCING means that it has not updated its configuration.
        public let deviceSettingsSyncState: DeviceSettingsSyncState?
        /// The status of software on the input device.
        public let deviceUpdateStatus: DeviceUpdateStatus?
        /// Settings that describe an input device that is type HD.
        public let hdDeviceSettings: InputDeviceHdSettings?
        /// The unique ID of the input device.
        public let id: String?
        /// The network MAC address of the input device.
        public let macAddress: String?
        /// A name that you specify for the input device.
        public let name: String?
        /// Network settings for the input device.
        public let networkSettings: InputDeviceNetworkSettings?
        /// The unique serial number of the input device.
        public let serialNumber: String?
        /// The type of the input device.
        public let type: InputDeviceType?
        /// Settings that describe an input device that is type UHD.
        public let uhdDeviceSettings: InputDeviceUhdSettings?

        public init(arn: String? = nil, connectionState: InputDeviceConnectionState? = nil, deviceSettingsSyncState: DeviceSettingsSyncState? = nil, deviceUpdateStatus: DeviceUpdateStatus? = nil, hdDeviceSettings: InputDeviceHdSettings? = nil, id: String? = nil, macAddress: String? = nil, name: String? = nil, networkSettings: InputDeviceNetworkSettings? = nil, serialNumber: String? = nil, type: InputDeviceType? = nil, uhdDeviceSettings: InputDeviceUhdSettings? = nil) {
            self.arn = arn
            self.connectionState = connectionState
            self.deviceSettingsSyncState = deviceSettingsSyncState
            self.deviceUpdateStatus = deviceUpdateStatus
            self.hdDeviceSettings = hdDeviceSettings
            self.id = id
            self.macAddress = macAddress
            self.name = name
            self.networkSettings = networkSettings
            self.serialNumber = serialNumber
            self.type = type
            self.uhdDeviceSettings = uhdDeviceSettings
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case connectionState
            case deviceSettingsSyncState
            case deviceUpdateStatus
            case hdDeviceSettings
            case id
            case macAddress
            case name
            case networkSettings
            case serialNumber
            case type
            case uhdDeviceSettings
        }
    }

    public struct InputDeviceUhdSettings: AWSDecodableShape {
        /// If you specified Auto as the configured input, specifies which of the sources is currently active (SDI or HDMI).
        public let activeInput: InputDeviceActiveInput?
        /// The source at the input device that is currently active. You can specify this source.
        public let configuredInput: InputDeviceConfiguredInput?
        /// The state of the input device.
        public let deviceState: InputDeviceState?
        /// The frame rate of the video source.
        public let framerate: Double?
        /// The height of the video source, in pixels.
        public let height: Int?
        /// The current maximum bitrate for ingesting this source, in bits per second. You can specify this maximum.
        public let maxBitrate: Int?
        /// The scan type of the video source.
        public let scanType: InputDeviceScanType?
        /// The width of the video source, in pixels.
        public let width: Int?

        public init(activeInput: InputDeviceActiveInput? = nil, configuredInput: InputDeviceConfiguredInput? = nil, deviceState: InputDeviceState? = nil, framerate: Double? = nil, height: Int? = nil, maxBitrate: Int? = nil, scanType: InputDeviceScanType? = nil, width: Int? = nil) {
            self.activeInput = activeInput
            self.configuredInput = configuredInput
            self.deviceState = deviceState
            self.framerate = framerate
            self.height = height
            self.maxBitrate = maxBitrate
            self.scanType = scanType
            self.width = width
        }

        private enum CodingKeys: String, CodingKey {
            case activeInput
            case configuredInput
            case deviceState
            case framerate
            case height
            case maxBitrate
            case scanType
            case width
        }
    }

    public struct InputLocation: AWSEncodableShape & AWSDecodableShape {
        /// key used to extract the password from EC2 Parameter store
        public let passwordParam: String?
        /// Uniform Resource Identifier - This should be a path to a file accessible to the Live system (eg. a http:// URI) depending on the output type. For example, a RTMP destination should have a uri simliar to: "rtmp://fmsserver/live".
        public let uri: String
        /// Username if credentials are required to access a file or publishing point.  This can be either a plaintext username, or a reference to an AWS parameter store name from which the username can be retrieved.  AWS Parameter store format: "ssm://"
        public let username: String?

        public init(passwordParam: String? = nil, uri: String, username: String? = nil) {
            self.passwordParam = passwordParam
            self.uri = uri
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case passwordParam
            case uri
            case username
        }
    }

    public struct InputLossBehavior: AWSEncodableShape & AWSDecodableShape {
        /// On input loss, the number of milliseconds to substitute black into the output before switching to the frame specified by inputLossImageType.  A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000 will be interpreted as infinite.
        public let blackFrameMsec: Int?
        /// When input loss image type is "color" this field specifies the color to use. Value: 6 hex characters representing the values of RGB.
        public let inputLossImageColor: String?
        /// When input loss image type is "slate" these fields specify the parameters for accessing the slate.
        public let inputLossImageSlate: InputLocation?
        /// Indicates whether to substitute a solid color or a slate into the output after input loss exceeds blackFrameMsec.
        public let inputLossImageType: InputLossImageType?
        /// On input loss, the number of milliseconds to repeat the previous picture before substituting black into the output.  A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000 will be interpreted as infinite.
        public let repeatFrameMsec: Int?

        public init(blackFrameMsec: Int? = nil, inputLossImageColor: String? = nil, inputLossImageSlate: InputLocation? = nil, inputLossImageType: InputLossImageType? = nil, repeatFrameMsec: Int? = nil) {
            self.blackFrameMsec = blackFrameMsec
            self.inputLossImageColor = inputLossImageColor
            self.inputLossImageSlate = inputLossImageSlate
            self.inputLossImageType = inputLossImageType
            self.repeatFrameMsec = repeatFrameMsec
        }

        public func validate(name: String) throws {
            try self.validate(self.blackFrameMsec, name: "blackFrameMsec", parent: name, max: 1_000_000)
            try self.validate(self.blackFrameMsec, name: "blackFrameMsec", parent: name, min: 0)
            try self.validate(self.inputLossImageColor, name: "inputLossImageColor", parent: name, max: 6)
            try self.validate(self.inputLossImageColor, name: "inputLossImageColor", parent: name, min: 6)
            try self.validate(self.repeatFrameMsec, name: "repeatFrameMsec", parent: name, max: 1_000_000)
            try self.validate(self.repeatFrameMsec, name: "repeatFrameMsec", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case blackFrameMsec
            case inputLossImageColor
            case inputLossImageSlate
            case inputLossImageType
            case repeatFrameMsec
        }
    }

    public struct InputLossFailoverSettings: AWSEncodableShape & AWSDecodableShape {
        /// The amount of time (in milliseconds) that no input is detected. After that time, an input failover will occur.
        public let inputLossThresholdMsec: Int?

        public init(inputLossThresholdMsec: Int? = nil) {
            self.inputLossThresholdMsec = inputLossThresholdMsec
        }

        public func validate(name: String) throws {
            try self.validate(self.inputLossThresholdMsec, name: "inputLossThresholdMsec", parent: name, min: 100)
        }

        private enum CodingKeys: String, CodingKey {
            case inputLossThresholdMsec
        }
    }

    public struct InputPrepareScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The name of the input attachment that should be prepared by this action. If no name is provided, the action will stop the most recent prepare (if any) when activated.
        public let inputAttachmentNameReference: String?
        /// Settings to let you create a clip of the file input, in order to set up the input to ingest only a portion of the file.
        public let inputClippingSettings: InputClippingSettings?
        /// The value for the variable portion of the URL for the dynamic input, for this instance of the input. Each time you use the same dynamic input in an input switch action, you can provide a different value, in order to connect the input to a different content source.
        public let urlPath: [String]?

        public init(inputAttachmentNameReference: String? = nil, inputClippingSettings: InputClippingSettings? = nil, urlPath: [String]? = nil) {
            self.inputAttachmentNameReference = inputAttachmentNameReference
            self.inputClippingSettings = inputClippingSettings
            self.urlPath = urlPath
        }

        private enum CodingKeys: String, CodingKey {
            case inputAttachmentNameReference
            case inputClippingSettings
            case urlPath
        }
    }

    public struct InputSecurityGroup: AWSDecodableShape {
        /// Unique ARN of Input Security Group
        public let arn: String?
        /// The Id of the Input Security Group
        public let id: String?
        /// The list of inputs currently using this Input Security Group.
        public let inputs: [String]?
        /// The current state of the Input Security Group.
        public let state: InputSecurityGroupState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Whitelist rules and their sync status
        public let whitelistRules: [InputWhitelistRule]?

        public init(arn: String? = nil, id: String? = nil, inputs: [String]? = nil, state: InputSecurityGroupState? = nil, tags: [String: String]? = nil, whitelistRules: [InputWhitelistRule]? = nil) {
            self.arn = arn
            self.id = id
            self.inputs = inputs
            self.state = state
            self.tags = tags
            self.whitelistRules = whitelistRules
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case id
            case inputs
            case state
            case tags
            case whitelistRules
        }
    }

    public struct InputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Used to select the audio stream to decode for inputs that have multiple available.
        public let audioSelectors: [AudioSelector]?
        /// Used to select the caption input to use for inputs that have multiple available.
        public let captionSelectors: [CaptionSelector]?
        /// Enable or disable the deblock filter when filtering.
        public let deblockFilter: InputDeblockFilter?
        /// Enable or disable the denoise filter when filtering.
        public let denoiseFilter: InputDenoiseFilter?
        /// Adjusts the magnitude of filtering from 1 (minimal) to 5 (strongest).
        public let filterStrength: Int?
        /// Turns on the filter for this input. MPEG-2 inputs have the deblocking filter enabled by default.
        /// 1) auto - filtering will be applied depending on input type/quality
        /// 2) disabled - no filtering will be applied to the input
        /// 3) forced - filtering will be applied regardless of input type
        public let inputFilter: InputFilter?
        /// Input settings.
        public let networkInputSettings: NetworkInputSettings?
        /// Specifies whether to extract applicable ancillary data from a SMPTE-2038 source in this input. Applicable data types are captions, timecode, AFD, and SCTE-104 messages.
        /// - PREFER: Extract from SMPTE-2038 if present in this input, otherwise extract from another source (if any).
        /// - IGNORE: Never extract any ancillary data from SMPTE-2038.
        public let smpte2038DataPreference: Smpte2038DataPreference?
        /// Loop input if it is a file. This allows a file input to be streamed indefinitely.
        public let sourceEndBehavior: InputSourceEndBehavior?
        /// Informs which video elementary stream to decode for input types that have multiple available.
        public let videoSelector: VideoSelector?

        public init(audioSelectors: [AudioSelector]? = nil, captionSelectors: [CaptionSelector]? = nil, deblockFilter: InputDeblockFilter? = nil, denoiseFilter: InputDenoiseFilter? = nil, filterStrength: Int? = nil, inputFilter: InputFilter? = nil, networkInputSettings: NetworkInputSettings? = nil, smpte2038DataPreference: Smpte2038DataPreference? = nil, sourceEndBehavior: InputSourceEndBehavior? = nil, videoSelector: VideoSelector? = nil) {
            self.audioSelectors = audioSelectors
            self.captionSelectors = captionSelectors
            self.deblockFilter = deblockFilter
            self.denoiseFilter = denoiseFilter
            self.filterStrength = filterStrength
            self.inputFilter = inputFilter
            self.networkInputSettings = networkInputSettings
            self.smpte2038DataPreference = smpte2038DataPreference
            self.sourceEndBehavior = sourceEndBehavior
            self.videoSelector = videoSelector
        }

        public func validate(name: String) throws {
            try self.audioSelectors?.forEach {
                try $0.validate(name: "\(name).audioSelectors[]")
            }
            try self.captionSelectors?.forEach {
                try $0.validate(name: "\(name).captionSelectors[]")
            }
            try self.validate(self.filterStrength, name: "filterStrength", parent: name, max: 5)
            try self.validate(self.filterStrength, name: "filterStrength", parent: name, min: 1)
            try self.networkInputSettings?.validate(name: "\(name).networkInputSettings")
            try self.videoSelector?.validate(name: "\(name).videoSelector")
        }

        private enum CodingKeys: String, CodingKey {
            case audioSelectors
            case captionSelectors
            case deblockFilter
            case denoiseFilter
            case filterStrength
            case inputFilter
            case networkInputSettings
            case smpte2038DataPreference
            case sourceEndBehavior
            case videoSelector
        }
    }

    public struct InputSource: AWSDecodableShape {
        /// The key used to extract the password from EC2 Parameter store.
        public let passwordParam: String?
        /// This represents the customer's source URL where stream is
        /// pulled from.
        public let url: String?
        /// The username for the input source.
        public let username: String?

        public init(passwordParam: String? = nil, url: String? = nil, username: String? = nil) {
            self.passwordParam = passwordParam
            self.url = url
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case passwordParam
            case url
            case username
        }
    }

    public struct InputSourceRequest: AWSEncodableShape {
        /// The key used to extract the password from EC2 Parameter store.
        public let passwordParam: String?
        /// This represents the customer's source URL where stream is
        /// pulled from.
        public let url: String?
        /// The username for the input source.
        public let username: String?

        public init(passwordParam: String? = nil, url: String? = nil, username: String? = nil) {
            self.passwordParam = passwordParam
            self.url = url
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case passwordParam
            case url
            case username
        }
    }

    public struct InputSpecification: AWSEncodableShape & AWSDecodableShape {
        /// Input codec
        public let codec: InputCodec?
        /// Maximum input bitrate, categorized coarsely
        public let maximumBitrate: InputMaximumBitrate?
        /// Input resolution, categorized coarsely
        public let resolution: InputResolution?

        public init(codec: InputCodec? = nil, maximumBitrate: InputMaximumBitrate? = nil, resolution: InputResolution? = nil) {
            self.codec = codec
            self.maximumBitrate = maximumBitrate
            self.resolution = resolution
        }

        private enum CodingKeys: String, CodingKey {
            case codec
            case maximumBitrate
            case resolution
        }
    }

    public struct InputSwitchScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The name of the input attachment (not the name of the input!) to switch to. The name is specified in the channel configuration.
        public let inputAttachmentNameReference: String
        /// Settings to let you create a clip of the file input, in order to set up the input to ingest only a portion of the file.
        public let inputClippingSettings: InputClippingSettings?
        /// The value for the variable portion of the URL for the dynamic input, for this instance of the input. Each time you use the same dynamic input in an input switch action, you can provide a different value, in order to connect the input to a different content source.
        public let urlPath: [String]?

        public init(inputAttachmentNameReference: String, inputClippingSettings: InputClippingSettings? = nil, urlPath: [String]? = nil) {
            self.inputAttachmentNameReference = inputAttachmentNameReference
            self.inputClippingSettings = inputClippingSettings
            self.urlPath = urlPath
        }

        private enum CodingKeys: String, CodingKey {
            case inputAttachmentNameReference
            case inputClippingSettings
            case urlPath
        }
    }

    public struct InputVpcRequest: AWSEncodableShape {
        /// A list of up to 5 EC2 VPC security group IDs to attach to the Input VPC network interfaces.
        /// Requires subnetIds. If none are specified then the VPC default security group will be used.
        public let securityGroupIds: [String]?
        /// A list of 2 VPC subnet IDs from the same VPC.
        /// Subnet IDs must be mapped to two unique availability zones (AZ).
        public let subnetIds: [String]

        public init(securityGroupIds: [String]? = nil, subnetIds: [String]) {
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
        }

        private enum CodingKeys: String, CodingKey {
            case securityGroupIds
            case subnetIds
        }
    }

    public struct InputWhitelistRule: AWSDecodableShape {
        /// The IPv4 CIDR that's whitelisted.
        public let cidr: String?

        public init(cidr: String? = nil) {
            self.cidr = cidr
        }

        private enum CodingKeys: String, CodingKey {
            case cidr
        }
    }

    public struct InputWhitelistRuleCidr: AWSEncodableShape {
        /// The IPv4 CIDR to whitelist.
        public let cidr: String?

        public init(cidr: String? = nil) {
            self.cidr = cidr
        }

        private enum CodingKeys: String, CodingKey {
            case cidr
        }
    }

    public struct KeyProviderSettings: AWSEncodableShape & AWSDecodableShape {
        public let staticKeySettings: StaticKeySettings?

        public init(staticKeySettings: StaticKeySettings? = nil) {
            self.staticKeySettings = staticKeySettings
        }

        public func validate(name: String) throws {
            try self.staticKeySettings?.validate(name: "\(name).staticKeySettings")
        }

        private enum CodingKeys: String, CodingKey {
            case staticKeySettings
        }
    }

    public struct ListChannelsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelsResponse: AWSDecodableShape {
        public let channels: [ChannelSummary]?
        public let nextToken: String?

        public init(channels: [ChannelSummary]? = nil, nextToken: String? = nil) {
            self.channels = channels
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channels
            case nextToken
        }
    }

    public struct ListInputDeviceTransfersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "transferType", location: .querystring(locationName: "transferType"))
        ]

        public let maxResults: Int?
        public let nextToken: String?
        public let transferType: String

        public init(maxResults: Int? = nil, nextToken: String? = nil, transferType: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.transferType = transferType
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListInputDeviceTransfersResponse: AWSDecodableShape {
        public let inputDeviceTransfers: [TransferringInputDeviceSummary]?
        public let nextToken: String?

        public init(inputDeviceTransfers: [TransferringInputDeviceSummary]? = nil, nextToken: String? = nil) {
            self.inputDeviceTransfers = inputDeviceTransfers
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case inputDeviceTransfers
            case nextToken
        }
    }

    public struct ListInputDevicesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListInputDevicesResponse: AWSDecodableShape {
        public let inputDevices: [InputDeviceSummary]?
        public let nextToken: String?

        public init(inputDevices: [InputDeviceSummary]? = nil, nextToken: String? = nil) {
            self.inputDevices = inputDevices
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case inputDevices
            case nextToken
        }
    }

    public struct ListInputSecurityGroupsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListInputSecurityGroupsResponse: AWSDecodableShape {
        public let inputSecurityGroups: [InputSecurityGroup]?
        public let nextToken: String?

        public init(inputSecurityGroups: [InputSecurityGroup]? = nil, nextToken: String? = nil) {
            self.inputSecurityGroups = inputSecurityGroups
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case inputSecurityGroups
            case nextToken
        }
    }

    public struct ListInputsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListInputsResponse: AWSDecodableShape {
        public let inputs: [Input]?
        public let nextToken: String?

        public init(inputs: [Input]? = nil, nextToken: String? = nil) {
            self.inputs = inputs
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case inputs
            case nextToken
        }
    }

    public struct ListMultiplexProgramsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let maxResults: Int?
        public let multiplexId: String
        public let nextToken: String?

        public init(maxResults: Int? = nil, multiplexId: String, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.multiplexId = multiplexId
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMultiplexProgramsResponse: AWSDecodableShape {
        public let multiplexPrograms: [MultiplexProgramSummary]?
        public let nextToken: String?

        public init(multiplexPrograms: [MultiplexProgramSummary]? = nil, nextToken: String? = nil) {
            self.multiplexPrograms = multiplexPrograms
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexPrograms
            case nextToken
        }
    }

    public struct ListMultiplexesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMultiplexesResponse: AWSDecodableShape {
        public let multiplexes: [MultiplexSummary]?
        public let nextToken: String?

        public init(multiplexes: [MultiplexSummary]? = nil, nextToken: String? = nil) {
            self.multiplexes = multiplexes
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexes
            case nextToken
        }
    }

    public struct ListOfferingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelClass", location: .querystring(locationName: "channelClass")),
            AWSMemberEncoding(label: "channelConfiguration", location: .querystring(locationName: "channelConfiguration")),
            AWSMemberEncoding(label: "codec", location: .querystring(locationName: "codec")),
            AWSMemberEncoding(label: "duration", location: .querystring(locationName: "duration")),
            AWSMemberEncoding(label: "maximumBitrate", location: .querystring(locationName: "maximumBitrate")),
            AWSMemberEncoding(label: "maximumFramerate", location: .querystring(locationName: "maximumFramerate")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "resolution", location: .querystring(locationName: "resolution")),
            AWSMemberEncoding(label: "resourceType", location: .querystring(locationName: "resourceType")),
            AWSMemberEncoding(label: "specialFeature", location: .querystring(locationName: "specialFeature")),
            AWSMemberEncoding(label: "videoQuality", location: .querystring(locationName: "videoQuality"))
        ]

        public let channelClass: String?
        public let channelConfiguration: String?
        public let codec: String?
        public let duration: String?
        public let maximumBitrate: String?
        public let maximumFramerate: String?
        public let maxResults: Int?
        public let nextToken: String?
        public let resolution: String?
        public let resourceType: String?
        public let specialFeature: String?
        public let videoQuality: String?

        public init(channelClass: String? = nil, channelConfiguration: String? = nil, codec: String? = nil, duration: String? = nil, maximumBitrate: String? = nil, maximumFramerate: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, resolution: String? = nil, resourceType: String? = nil, specialFeature: String? = nil, videoQuality: String? = nil) {
            self.channelClass = channelClass
            self.channelConfiguration = channelConfiguration
            self.codec = codec
            self.duration = duration
            self.maximumBitrate = maximumBitrate
            self.maximumFramerate = maximumFramerate
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.resolution = resolution
            self.resourceType = resourceType
            self.specialFeature = specialFeature
            self.videoQuality = videoQuality
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListOfferingsResponse: AWSDecodableShape {
        public let nextToken: String?
        public let offerings: [Offering]?

        public init(nextToken: String? = nil, offerings: [Offering]? = nil) {
            self.nextToken = nextToken
            self.offerings = offerings
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken
            case offerings
        }
    }

    public struct ListReservationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelClass", location: .querystring(locationName: "channelClass")),
            AWSMemberEncoding(label: "codec", location: .querystring(locationName: "codec")),
            AWSMemberEncoding(label: "maximumBitrate", location: .querystring(locationName: "maximumBitrate")),
            AWSMemberEncoding(label: "maximumFramerate", location: .querystring(locationName: "maximumFramerate")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "resolution", location: .querystring(locationName: "resolution")),
            AWSMemberEncoding(label: "resourceType", location: .querystring(locationName: "resourceType")),
            AWSMemberEncoding(label: "specialFeature", location: .querystring(locationName: "specialFeature")),
            AWSMemberEncoding(label: "videoQuality", location: .querystring(locationName: "videoQuality"))
        ]

        public let channelClass: String?
        public let codec: String?
        public let maximumBitrate: String?
        public let maximumFramerate: String?
        public let maxResults: Int?
        public let nextToken: String?
        public let resolution: String?
        public let resourceType: String?
        public let specialFeature: String?
        public let videoQuality: String?

        public init(channelClass: String? = nil, codec: String? = nil, maximumBitrate: String? = nil, maximumFramerate: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, resolution: String? = nil, resourceType: String? = nil, specialFeature: String? = nil, videoQuality: String? = nil) {
            self.channelClass = channelClass
            self.codec = codec
            self.maximumBitrate = maximumBitrate
            self.maximumFramerate = maximumFramerate
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.resolution = resolution
            self.resourceType = resourceType
            self.specialFeature = specialFeature
            self.videoQuality = videoQuality
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListReservationsResponse: AWSDecodableShape {
        public let nextToken: String?
        public let reservations: [Reservation]?

        public init(nextToken: String? = nil, reservations: [Reservation]? = nil) {
            self.nextToken = nextToken
            self.reservations = reservations
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken
            case reservations
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resource-arn"))
        ]

        public let resourceArn: String

        public init(resourceArn: String) {
            self.resourceArn = resourceArn
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape {
        public let tags: [String: String]?

        public init(tags: [String: String]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags
        }
    }

    public struct M2tsSettings: AWSEncodableShape & AWSDecodableShape {
        /// When set to drop, output audio streams will be removed from the program if the selected input audio stream is removed from the input. This allows the output audio configuration to dynamically change based on input configuration. If this is set to encodeSilence, all output audio streams will output encoded silence when not connected to an active input stream.
        public let absentInputAudioBehavior: M2tsAbsentInputAudioBehavior?
        /// When set to enabled, uses ARIB-compliant field muxing and removes video descriptor.
        public let arib: M2tsArib?
        /// Packet Identifier (PID) for ARIB Captions in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let aribCaptionsPid: String?
        /// If set to auto, pid number used for ARIB Captions will be auto-selected from unused pids.  If set to useConfigured, ARIB Captions will be on the configured pid number.
        public let aribCaptionsPidControl: M2tsAribCaptionsPidControl?
        /// When set to dvb, uses DVB buffer model for Dolby Digital audio.  When set to atsc, the ATSC model is used.
        public let audioBufferModel: M2tsAudioBufferModel?
        /// The number of audio frames to insert for each PES packet.
        public let audioFramesPerPes: Int?
        /// Packet Identifier (PID) of the elementary audio stream(s) in the transport stream. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
        public let audioPids: String?
        /// When set to atsc, uses stream type = 0x81 for AC3 and stream type = 0x87 for EAC3. When set to dvb, uses stream type = 0x06.
        public let audioStreamType: M2tsAudioStreamType?
        /// The output bitrate of the transport stream in bits per second. Setting to 0 lets the muxer automatically determine the appropriate bitrate.
        public let bitrate: Int?
        /// Controls the timing accuracy for output network traffic. Leave as MULTIPLEX to ensure accurate network packet timing. Or set to NONE, which might result in lower latency but will result in more variability in output network packet timing. This variability might cause interruptions, jitter, or bursty behavior in your playback or receiving devices.
        public let bufferModel: M2tsBufferModel?
        /// When set to enabled, generates captionServiceDescriptor in PMT.
        public let ccDescriptor: M2tsCcDescriptor?
        /// Inserts DVB Network Information Table (NIT) at the specified table repetition interval.
        public let dvbNitSettings: DvbNitSettings?
        /// Inserts DVB Service Description Table (SDT) at the specified table repetition interval.
        public let dvbSdtSettings: DvbSdtSettings?
        /// Packet Identifier (PID) for input source DVB Subtitle data to this output. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values.  Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
        public let dvbSubPids: String?
        /// Inserts DVB Time and Date Table (TDT) at the specified table repetition interval.
        public let dvbTdtSettings: DvbTdtSettings?
        /// Packet Identifier (PID) for input source DVB Teletext data to this output. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let dvbTeletextPid: String?
        /// If set to passthrough, passes any EBIF data from the input source to this output.
        public let ebif: M2tsEbifControl?
        /// When videoAndFixedIntervals is selected, audio EBP markers will be added to partitions 3 and 4. The interval between these additional markers will be fixed, and will be slightly shorter than the video EBP marker interval. Only available when EBP Cablelabs segmentation markers are selected.  Partitions 1 and 2 will always follow the video interval.
        public let ebpAudioInterval: M2tsAudioInterval?
        /// When set, enforces that Encoder Boundary Points do not come within the specified time interval of each other by looking ahead at input video. If another EBP is going to come in within the specified time interval, the current EBP is not emitted, and the segment is "stretched" to the next marker.  The lookahead value does not add latency to the system. The Live Event must be configured elsewhere to create sufficient latency to make the lookahead accurate.
        public let ebpLookaheadMs: Int?
        /// Controls placement of EBP on Audio PIDs. If set to videoAndAudioPids, EBP markers will be placed on the video PID and all audio PIDs.  If set to videoPid, EBP markers will be placed on only the video PID.
        public let ebpPlacement: M2tsEbpPlacement?
        /// This field is unused and deprecated.
        public let ecmPid: String?
        /// Include or exclude the ES Rate field in the PES header.
        public let esRateInPes: M2tsEsRateInPes?
        /// Packet Identifier (PID) for input source ETV Platform data to this output. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let etvPlatformPid: String?
        /// Packet Identifier (PID) for input source ETV Signal data to this output. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let etvSignalPid: String?
        /// The length in seconds of each fragment. Only used with EBP markers.
        public let fragmentTime: Double?
        /// If set to passthrough, passes any KLV data from the input source to this output.
        public let klv: M2tsKlv?
        /// Packet Identifier (PID) for input source KLV data to this output. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values.  Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
        public let klvDataPids: String?
        /// If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
        public let nielsenId3Behavior: M2tsNielsenId3Behavior?
        /// Value in bits per second of extra null packets to insert into the transport stream. This can be used if a downstream encryption system requires periodic null packets.
        public let nullPacketBitrate: Double?
        /// The number of milliseconds between instances of this table in the output transport stream.  Valid values are 0, 10..1000.
        public let patInterval: Int?
        /// When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header. This parameter is effective only when the PCR PID is the same as the video or audio elementary stream.
        public let pcrControl: M2tsPcrControl?
        /// Maximum time in milliseconds between Program Clock Reference (PCRs) inserted into the transport stream.
        public let pcrPeriod: Int?
        /// Packet Identifier (PID) of the Program Clock Reference (PCR) in the transport stream. When no value is given, the encoder will assign the same value as the Video PID. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let pcrPid: String?
        /// The number of milliseconds between instances of this table in the output transport stream. Valid values are 0, 10..1000.
        public let pmtInterval: Int?
        /// Packet Identifier (PID) for the Program Map Table (PMT) in the transport stream. Can be entered as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let pmtPid: String?
        /// The value of the program number field in the Program Map Table.
        public let programNum: Int?
        /// When vbr, does not insert null packets into transport stream to fill specified bitrate. The bitrate setting acts as the maximum bitrate when vbr is set.
        public let rateMode: M2tsRateMode?
        /// Packet Identifier (PID) for input source SCTE-27 data to this output. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values.  Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
        public let scte27Pids: String?
        /// Optionally pass SCTE-35 signals from the input source to this output.
        public let scte35Control: M2tsScte35Control?
        /// Packet Identifier (PID) of the SCTE-35 stream in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let scte35Pid: String?
        /// Inserts segmentation markers at each segmentationTime period. raiSegstart sets the Random Access Indicator bit in the adaptation field. raiAdapt sets the RAI bit and adds the current timecode in the private data bytes. psiSegstart inserts PAT and PMT tables at the start of segments. ebp adds Encoder Boundary Point information to the adaptation field as per OpenCable specification OC-SP-EBP-I01-130118. ebpLegacy adds Encoder Boundary Point information to the adaptation field using a legacy proprietary format.
        public let segmentationMarkers: M2tsSegmentationMarkers?
        /// The segmentation style parameter controls how segmentation markers are inserted into the transport stream. With avails, it is possible that segments may be truncated, which can influence where future segmentation markers are inserted.
        /// When a segmentation style of "resetCadence" is selected and a segment is truncated due to an avail, we will reset the segmentation cadence. This means the subsequent segment will have a duration of $segmentationTime seconds.
        /// When a segmentation style of "maintainCadence" is selected and a segment is truncated due to an avail, we will not reset the segmentation cadence. This means the subsequent segment will likely be truncated as well. However, all segments after that will have a duration of $segmentationTime seconds. Note that EBP lookahead is a slight exception to this rule.
        public let segmentationStyle: M2tsSegmentationStyle?
        /// The length in seconds of each segment. Required unless markers is set to _none_.
        public let segmentationTime: Double?
        /// When set to passthrough, timed metadata will be passed through from input to output.
        public let timedMetadataBehavior: M2tsTimedMetadataBehavior?
        /// Packet Identifier (PID) of the timed metadata stream in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let timedMetadataPid: String?
        /// The value of the transport stream ID field in the Program Map Table.
        public let transportStreamId: Int?
        /// Packet Identifier (PID) of the elementary video stream in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let videoPid: String?

        public init(absentInputAudioBehavior: M2tsAbsentInputAudioBehavior? = nil, arib: M2tsArib? = nil, aribCaptionsPid: String? = nil, aribCaptionsPidControl: M2tsAribCaptionsPidControl? = nil, audioBufferModel: M2tsAudioBufferModel? = nil, audioFramesPerPes: Int? = nil, audioPids: String? = nil, audioStreamType: M2tsAudioStreamType? = nil, bitrate: Int? = nil, bufferModel: M2tsBufferModel? = nil, ccDescriptor: M2tsCcDescriptor? = nil, dvbNitSettings: DvbNitSettings? = nil, dvbSdtSettings: DvbSdtSettings? = nil, dvbSubPids: String? = nil, dvbTdtSettings: DvbTdtSettings? = nil, dvbTeletextPid: String? = nil, ebif: M2tsEbifControl? = nil, ebpAudioInterval: M2tsAudioInterval? = nil, ebpLookaheadMs: Int? = nil, ebpPlacement: M2tsEbpPlacement? = nil, ecmPid: String? = nil, esRateInPes: M2tsEsRateInPes? = nil, etvPlatformPid: String? = nil, etvSignalPid: String? = nil, fragmentTime: Double? = nil, klv: M2tsKlv? = nil, klvDataPids: String? = nil, nielsenId3Behavior: M2tsNielsenId3Behavior? = nil, nullPacketBitrate: Double? = nil, patInterval: Int? = nil, pcrControl: M2tsPcrControl? = nil, pcrPeriod: Int? = nil, pcrPid: String? = nil, pmtInterval: Int? = nil, pmtPid: String? = nil, programNum: Int? = nil, rateMode: M2tsRateMode? = nil, scte27Pids: String? = nil, scte35Control: M2tsScte35Control? = nil, scte35Pid: String? = nil, segmentationMarkers: M2tsSegmentationMarkers? = nil, segmentationStyle: M2tsSegmentationStyle? = nil, segmentationTime: Double? = nil, timedMetadataBehavior: M2tsTimedMetadataBehavior? = nil, timedMetadataPid: String? = nil, transportStreamId: Int? = nil, videoPid: String? = nil) {
            self.absentInputAudioBehavior = absentInputAudioBehavior
            self.arib = arib
            self.aribCaptionsPid = aribCaptionsPid
            self.aribCaptionsPidControl = aribCaptionsPidControl
            self.audioBufferModel = audioBufferModel
            self.audioFramesPerPes = audioFramesPerPes
            self.audioPids = audioPids
            self.audioStreamType = audioStreamType
            self.bitrate = bitrate
            self.bufferModel = bufferModel
            self.ccDescriptor = ccDescriptor
            self.dvbNitSettings = dvbNitSettings
            self.dvbSdtSettings = dvbSdtSettings
            self.dvbSubPids = dvbSubPids
            self.dvbTdtSettings = dvbTdtSettings
            self.dvbTeletextPid = dvbTeletextPid
            self.ebif = ebif
            self.ebpAudioInterval = ebpAudioInterval
            self.ebpLookaheadMs = ebpLookaheadMs
            self.ebpPlacement = ebpPlacement
            self.ecmPid = ecmPid
            self.esRateInPes = esRateInPes
            self.etvPlatformPid = etvPlatformPid
            self.etvSignalPid = etvSignalPid
            self.fragmentTime = fragmentTime
            self.klv = klv
            self.klvDataPids = klvDataPids
            self.nielsenId3Behavior = nielsenId3Behavior
            self.nullPacketBitrate = nullPacketBitrate
            self.patInterval = patInterval
            self.pcrControl = pcrControl
            self.pcrPeriod = pcrPeriod
            self.pcrPid = pcrPid
            self.pmtInterval = pmtInterval
            self.pmtPid = pmtPid
            self.programNum = programNum
            self.rateMode = rateMode
            self.scte27Pids = scte27Pids
            self.scte35Control = scte35Control
            self.scte35Pid = scte35Pid
            self.segmentationMarkers = segmentationMarkers
            self.segmentationStyle = segmentationStyle
            self.segmentationTime = segmentationTime
            self.timedMetadataBehavior = timedMetadataBehavior
            self.timedMetadataPid = timedMetadataPid
            self.transportStreamId = transportStreamId
            self.videoPid = videoPid
        }

        public func validate(name: String) throws {
            try self.validate(self.audioFramesPerPes, name: "audioFramesPerPes", parent: name, min: 0)
            try self.validate(self.bitrate, name: "bitrate", parent: name, min: 0)
            try self.dvbNitSettings?.validate(name: "\(name).dvbNitSettings")
            try self.dvbSdtSettings?.validate(name: "\(name).dvbSdtSettings")
            try self.dvbTdtSettings?.validate(name: "\(name).dvbTdtSettings")
            try self.validate(self.ebpLookaheadMs, name: "ebpLookaheadMs", parent: name, max: 10000)
            try self.validate(self.ebpLookaheadMs, name: "ebpLookaheadMs", parent: name, min: 0)
            try self.validate(self.patInterval, name: "patInterval", parent: name, max: 1000)
            try self.validate(self.patInterval, name: "patInterval", parent: name, min: 0)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, max: 500)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, min: 0)
            try self.validate(self.pmtInterval, name: "pmtInterval", parent: name, max: 1000)
            try self.validate(self.pmtInterval, name: "pmtInterval", parent: name, min: 0)
            try self.validate(self.programNum, name: "programNum", parent: name, max: 65535)
            try self.validate(self.programNum, name: "programNum", parent: name, min: 0)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, max: 65535)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case absentInputAudioBehavior
            case arib
            case aribCaptionsPid
            case aribCaptionsPidControl
            case audioBufferModel
            case audioFramesPerPes
            case audioPids
            case audioStreamType
            case bitrate
            case bufferModel
            case ccDescriptor
            case dvbNitSettings
            case dvbSdtSettings
            case dvbSubPids
            case dvbTdtSettings
            case dvbTeletextPid
            case ebif
            case ebpAudioInterval
            case ebpLookaheadMs
            case ebpPlacement
            case ecmPid
            case esRateInPes
            case etvPlatformPid
            case etvSignalPid
            case fragmentTime
            case klv
            case klvDataPids
            case nielsenId3Behavior
            case nullPacketBitrate
            case patInterval
            case pcrControl
            case pcrPeriod
            case pcrPid
            case pmtInterval
            case pmtPid
            case programNum
            case rateMode
            case scte27Pids
            case scte35Control
            case scte35Pid
            case segmentationMarkers
            case segmentationStyle
            case segmentationTime
            case timedMetadataBehavior
            case timedMetadataPid
            case transportStreamId
            case videoPid
        }
    }

    public struct M3u8Settings: AWSEncodableShape & AWSDecodableShape {
        /// The number of audio frames to insert for each PES packet.
        public let audioFramesPerPes: Int?
        /// Packet Identifier (PID) of the elementary audio stream(s) in the transport stream. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values.
        public let audioPids: String?
        /// This parameter is unused and deprecated.
        public let ecmPid: String?
        /// If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
        public let nielsenId3Behavior: M3u8NielsenId3Behavior?
        /// The number of milliseconds between instances of this table in the output transport stream. A value of \"0\" writes out the PMT once per segment file.
        public let patInterval: Int?
        /// When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header. This parameter is effective only when the PCR PID is the same as the video or audio elementary stream.
        public let pcrControl: M3u8PcrControl?
        /// Maximum time in milliseconds between Program Clock References (PCRs) inserted into the transport stream.
        public let pcrPeriod: Int?
        /// Packet Identifier (PID) of the Program Clock Reference (PCR) in the transport stream. When no value is given, the encoder will assign the same value as the Video PID. Can be entered as a decimal or hexadecimal value.
        public let pcrPid: String?
        /// The number of milliseconds between instances of this table in the output transport stream. A value of \"0\" writes out the PMT once per segment file.
        public let pmtInterval: Int?
        /// Packet Identifier (PID) for the Program Map Table (PMT) in the transport stream. Can be entered as a decimal or hexadecimal value.
        public let pmtPid: String?
        /// The value of the program number field in the Program Map Table.
        public let programNum: Int?
        /// If set to passthrough, passes any SCTE-35 signals from the input source to this output.
        public let scte35Behavior: M3u8Scte35Behavior?
        /// Packet Identifier (PID) of the SCTE-35 stream in the transport stream. Can be entered as a decimal or hexadecimal value.
        public let scte35Pid: String?
        /// When set to passthrough, timed metadata is passed through from input to output.
        public let timedMetadataBehavior: M3u8TimedMetadataBehavior?
        /// Packet Identifier (PID) of the timed metadata stream in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let timedMetadataPid: String?
        /// The value of the transport stream ID field in the Program Map Table.
        public let transportStreamId: Int?
        /// Packet Identifier (PID) of the elementary video stream in the transport stream. Can be entered as a decimal or hexadecimal value.
        public let videoPid: String?

        public init(audioFramesPerPes: Int? = nil, audioPids: String? = nil, ecmPid: String? = nil, nielsenId3Behavior: M3u8NielsenId3Behavior? = nil, patInterval: Int? = nil, pcrControl: M3u8PcrControl? = nil, pcrPeriod: Int? = nil, pcrPid: String? = nil, pmtInterval: Int? = nil, pmtPid: String? = nil, programNum: Int? = nil, scte35Behavior: M3u8Scte35Behavior? = nil, scte35Pid: String? = nil, timedMetadataBehavior: M3u8TimedMetadataBehavior? = nil, timedMetadataPid: String? = nil, transportStreamId: Int? = nil, videoPid: String? = nil) {
            self.audioFramesPerPes = audioFramesPerPes
            self.audioPids = audioPids
            self.ecmPid = ecmPid
            self.nielsenId3Behavior = nielsenId3Behavior
            self.patInterval = patInterval
            self.pcrControl = pcrControl
            self.pcrPeriod = pcrPeriod
            self.pcrPid = pcrPid
            self.pmtInterval = pmtInterval
            self.pmtPid = pmtPid
            self.programNum = programNum
            self.scte35Behavior = scte35Behavior
            self.scte35Pid = scte35Pid
            self.timedMetadataBehavior = timedMetadataBehavior
            self.timedMetadataPid = timedMetadataPid
            self.transportStreamId = transportStreamId
            self.videoPid = videoPid
        }

        public func validate(name: String) throws {
            try self.validate(self.audioFramesPerPes, name: "audioFramesPerPes", parent: name, min: 0)
            try self.validate(self.patInterval, name: "patInterval", parent: name, max: 1000)
            try self.validate(self.patInterval, name: "patInterval", parent: name, min: 0)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, max: 500)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, min: 0)
            try self.validate(self.pmtInterval, name: "pmtInterval", parent: name, max: 1000)
            try self.validate(self.pmtInterval, name: "pmtInterval", parent: name, min: 0)
            try self.validate(self.programNum, name: "programNum", parent: name, max: 65535)
            try self.validate(self.programNum, name: "programNum", parent: name, min: 0)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, max: 65535)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case audioFramesPerPes
            case audioPids
            case ecmPid
            case nielsenId3Behavior
            case patInterval
            case pcrControl
            case pcrPeriod
            case pcrPid
            case pmtInterval
            case pmtPid
            case programNum
            case scte35Behavior
            case scte35Pid
            case timedMetadataBehavior
            case timedMetadataPid
            case transportStreamId
            case videoPid
        }
    }

    public struct MediaConnectFlow: AWSDecodableShape {
        /// The unique ARN of the MediaConnect Flow being used as a source.
        public let flowArn: String?

        public init(flowArn: String? = nil) {
            self.flowArn = flowArn
        }

        private enum CodingKeys: String, CodingKey {
            case flowArn
        }
    }

    public struct MediaConnectFlowRequest: AWSEncodableShape {
        /// The ARN of the MediaConnect Flow that you want to use as a source.
        public let flowArn: String?

        public init(flowArn: String? = nil) {
            self.flowArn = flowArn
        }

        private enum CodingKeys: String, CodingKey {
            case flowArn
        }
    }

    public struct MediaPackageGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// MediaPackage channel destination.
        public let destination: OutputLocationRef

        public init(destination: OutputLocationRef) {
            self.destination = destination
        }

        private enum CodingKeys: String, CodingKey {
            case destination
        }
    }

    public struct MediaPackageOutputDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// ID of the channel in MediaPackage that is the destination for this output group. You do not need to specify the individual inputs in MediaPackage; MediaLive will handle the connection of the two MediaLive pipelines to the two MediaPackage inputs. The MediaPackage channel and MediaLive channel must be in the same region.
        public let channelId: String?

        public init(channelId: String? = nil) {
            self.channelId = channelId
        }

        public func validate(name: String) throws {
            try self.validate(self.channelId, name: "channelId", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case channelId
        }
    }

    public struct MediaPackageOutputSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Mp2Settings: AWSEncodableShape & AWSDecodableShape {
        /// Average bitrate in bits/second.
        public let bitrate: Double?
        /// The MPEG2 Audio coding mode.  Valid values are codingMode10 (for mono) or codingMode20 (for stereo).
        public let codingMode: Mp2CodingMode?
        /// Sample rate in Hz.
        public let sampleRate: Double?

        public init(bitrate: Double? = nil, codingMode: Mp2CodingMode? = nil, sampleRate: Double? = nil) {
            self.bitrate = bitrate
            self.codingMode = codingMode
            self.sampleRate = sampleRate
        }

        private enum CodingKeys: String, CodingKey {
            case bitrate
            case codingMode
            case sampleRate
        }
    }

    public struct Mpeg2FilterSettings: AWSEncodableShape & AWSDecodableShape {
        public let temporalFilterSettings: TemporalFilterSettings?

        public init(temporalFilterSettings: TemporalFilterSettings? = nil) {
            self.temporalFilterSettings = temporalFilterSettings
        }

        private enum CodingKeys: String, CodingKey {
            case temporalFilterSettings
        }
    }

    public struct Mpeg2Settings: AWSEncodableShape & AWSDecodableShape {
        /// Choose Off to disable adaptive quantization. Or choose another value to enable the quantizer and set its strength. The strengths are: Auto, Off, Low, Medium, High. When you enable this field, MediaLive allows intra-frame quantizers to vary, which might improve visual quality.
        public let adaptiveQuantization: Mpeg2AdaptiveQuantization?
        /// Indicates the AFD values that MediaLive will write into the video encode. If you do not know what AFD signaling is, or if your downstream system has not given you guidance, choose AUTO.
        /// AUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD values are valid).
        /// FIXED: MediaLive will use the value you specify in fixedAFD.
        public let afdSignaling: AfdSignaling?
        /// Specifies whether to include the color space metadata. The metadata describes the color space that applies to the video (the colorSpace field). We recommend that you insert the metadata.
        public let colorMetadata: Mpeg2ColorMetadata?
        /// Choose the type of color space conversion to apply to the output. For detailed information on setting up both the input and the output to obtain the desired color space in the output, see the section on \"MediaLive Features - Video - color space\" in the MediaLive User Guide.
        /// PASSTHROUGH: Keep the color space of the input content - do not convert it.
        /// AUTO:Convert all content that is SD to rec 601, and convert all content that is HD to rec 709.
        public let colorSpace: Mpeg2ColorSpace?
        /// Sets the pixel aspect ratio for the encode.
        public let displayAspectRatio: Mpeg2DisplayRatio?
        /// Optionally specify a noise reduction filter, which can improve quality of compressed content. If you do not choose a filter, no filter will be applied.
        /// TEMPORAL: This filter is useful for both source content that is noisy (when it has excessive digital artifacts) and source content that is clean.
        /// When the content is noisy, the filter cleans up the source content before the encoding phase, with these two effects: First, it improves the output video quality because the content has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste bits on encoding noise.
        /// When the content is reasonably clean, the filter tends to decrease the bitrate.
        public let filterSettings: Mpeg2FilterSettings?
        /// Complete this field only when afdSignaling is set to FIXED. Enter the AFD value (4 bits) to write on all frames of the video encode.
        public let fixedAfd: FixedAfd?
        /// description": "The framerate denominator. For example, 1001. The framerate is the numerator divided by the denominator. For example, 24000 / 1001 = 23.976 FPS.
        public let framerateDenominator: Int
        /// The framerate numerator. For example, 24000. The framerate is the numerator divided by the denominator. For example, 24000 / 1001 = 23.976 FPS.
        public let framerateNumerator: Int
        /// MPEG2: default is open GOP.
        public let gopClosedCadence: Int?
        /// Relates to the GOP structure. The number of B-frames between reference frames. If you do not know what a B-frame is, use the default.
        public let gopNumBFrames: Int?
        /// Relates to the GOP structure. The GOP size (keyframe interval) in the units specified in gopSizeUnits. If you do not know what GOP is, use the default.
        /// If gopSizeUnits is frames, then the gopSize must be an integer and must be greater than or equal to 1.
        /// If gopSizeUnits is seconds, the gopSize must be greater than 0, but does not need to be an integer.
        public let gopSize: Double?
        /// Relates to the GOP structure. Specifies whether the gopSize is specified in frames or seconds. If you do not plan to change the default gopSize, leave the default. If you specify SECONDS, MediaLive will internally convert the gop size to a frame count.
        public let gopSizeUnits: Mpeg2GopSizeUnits?
        /// Set the scan type of the output to PROGRESSIVE or INTERLACED (top field first).
        public let scanType: Mpeg2ScanType?
        /// Relates to the GOP structure. If you do not know what GOP is, use the default.
        /// FIXED: Set the number of B-frames in each sub-GOP to the value in gopNumBFrames.
        /// DYNAMIC: Let MediaLive optimize the number of B-frames in each sub-GOP, to improve visual quality.
        public let subgopLength: Mpeg2SubGopLength?
        /// Determines how MediaLive inserts timecodes in the output video. For detailed information about setting up the input and the output for a timecode, see the section on \"MediaLive Features - Timecode configuration\" in the MediaLive User Guide.
        /// DISABLED: do not include timecodes.
        /// GOP_TIMECODE: Include timecode metadata in the GOP header.
        public let timecodeInsertion: Mpeg2TimecodeInsertionBehavior?

        public init(adaptiveQuantization: Mpeg2AdaptiveQuantization? = nil, afdSignaling: AfdSignaling? = nil, colorMetadata: Mpeg2ColorMetadata? = nil, colorSpace: Mpeg2ColorSpace? = nil, displayAspectRatio: Mpeg2DisplayRatio? = nil, filterSettings: Mpeg2FilterSettings? = nil, fixedAfd: FixedAfd? = nil, framerateDenominator: Int, framerateNumerator: Int, gopClosedCadence: Int? = nil, gopNumBFrames: Int? = nil, gopSize: Double? = nil, gopSizeUnits: Mpeg2GopSizeUnits? = nil, scanType: Mpeg2ScanType? = nil, subgopLength: Mpeg2SubGopLength? = nil, timecodeInsertion: Mpeg2TimecodeInsertionBehavior? = nil) {
            self.adaptiveQuantization = adaptiveQuantization
            self.afdSignaling = afdSignaling
            self.colorMetadata = colorMetadata
            self.colorSpace = colorSpace
            self.displayAspectRatio = displayAspectRatio
            self.filterSettings = filterSettings
            self.fixedAfd = fixedAfd
            self.framerateDenominator = framerateDenominator
            self.framerateNumerator = framerateNumerator
            self.gopClosedCadence = gopClosedCadence
            self.gopNumBFrames = gopNumBFrames
            self.gopSize = gopSize
            self.gopSizeUnits = gopSizeUnits
            self.scanType = scanType
            self.subgopLength = subgopLength
            self.timecodeInsertion = timecodeInsertion
        }

        public func validate(name: String) throws {
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, min: 1)
            try self.validate(self.framerateNumerator, name: "framerateNumerator", parent: name, min: 1)
            try self.validate(self.gopClosedCadence, name: "gopClosedCadence", parent: name, min: 0)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, max: 7)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case adaptiveQuantization
            case afdSignaling
            case colorMetadata
            case colorSpace
            case displayAspectRatio
            case filterSettings
            case fixedAfd
            case framerateDenominator
            case framerateNumerator
            case gopClosedCadence
            case gopNumBFrames
            case gopSize
            case gopSizeUnits
            case scanType
            case subgopLength
            case timecodeInsertion
        }
    }

    public struct MsSmoothGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// The ID to include in each message in the sparse track. Ignored if sparseTrackType is NONE.
        public let acquisitionPointId: String?
        /// If set to passthrough for an audio-only MS Smooth output, the fragment absolute time will be set to the current timecode. This option does not write timecodes to the audio elementary stream.
        public let audioOnlyTimecodeControl: SmoothGroupAudioOnlyTimecodeControl?
        /// If set to verifyAuthenticity, verify the https certificate chain to a trusted Certificate Authority (CA).  This will cause https outputs to self-signed certificates to fail.
        public let certificateMode: SmoothGroupCertificateMode?
        /// Number of seconds to wait before retrying connection to the IIS server if the connection is lost. Content will be cached during this time and the cache will be be delivered to the IIS server once the connection is re-established.
        public let connectionRetryInterval: Int?
        /// Smooth Streaming publish point on an IIS server. Elemental Live acts as a "Push" encoder to IIS.
        public let destination: OutputLocationRef
        /// MS Smooth event ID to be sent to the IIS server.
        /// Should only be specified if eventIdMode is set to useConfigured.
        public let eventId: String?
        /// Specifies whether or not to send an event ID to the IIS server. If no event ID is sent and the same Live Event is used without changing the publishing point, clients might see cached video from the previous run.
        /// Options:
        /// - "useConfigured" - use the value provided in eventId
        /// - "useTimestamp" - generate and send an event ID based on the current timestamp
        /// - "noEventId" - do not send an event ID to the IIS server.
        public let eventIdMode: SmoothGroupEventIdMode?
        /// When set to sendEos, send EOS signal to IIS server when stopping the event
        public let eventStopBehavior: SmoothGroupEventStopBehavior?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// Length of mp4 fragments to generate (in seconds). Fragment length must be compatible with GOP size and framerate.
        public let fragmentLength: Int?
        /// Parameter that control output group behavior on input loss.
        public let inputLossAction: InputLossActionForMsSmoothOut?
        /// Number of retry attempts.
        public let numRetries: Int?
        /// Number of seconds before initiating a restart due to output failure, due to exhausting the numRetries on one segment, or exceeding filecacheDuration.
        public let restartDelay: Int?
        /// useInputSegmentation has been deprecated. The configured segment size is always used.
        public let segmentationMode: SmoothGroupSegmentationMode?
        /// Number of milliseconds to delay the output from the second pipeline.
        public let sendDelayMs: Int?
        /// Identifies the type of data to place in the sparse track:
        /// - SCTE35: Insert SCTE-35 messages from the source content. With each message, insert an IDR frame to start a new segment.
        /// - SCTE35_WITHOUT_SEGMENTATION: Insert SCTE-35 messages from the source content. With each message, insert an IDR frame but don't start a new segment.
        /// - NONE: Don't generate a sparse track for any outputs in this output group.
        public let sparseTrackType: SmoothGroupSparseTrackType?
        /// When set to send, send stream manifest so publishing point doesn't start until all streams start.
        public let streamManifestBehavior: SmoothGroupStreamManifestBehavior?
        /// Timestamp offset for the event.  Only used if timestampOffsetMode is set to useConfiguredOffset.
        public let timestampOffset: String?
        /// Type of timestamp date offset to use.
        /// - useEventStartDate: Use the date the event was started as the offset
        /// - useConfiguredOffset: Use an explicitly configured date as the offset
        public let timestampOffsetMode: SmoothGroupTimestampOffsetMode?

        public init(acquisitionPointId: String? = nil, audioOnlyTimecodeControl: SmoothGroupAudioOnlyTimecodeControl? = nil, certificateMode: SmoothGroupCertificateMode? = nil, connectionRetryInterval: Int? = nil, destination: OutputLocationRef, eventId: String? = nil, eventIdMode: SmoothGroupEventIdMode? = nil, eventStopBehavior: SmoothGroupEventStopBehavior? = nil, filecacheDuration: Int? = nil, fragmentLength: Int? = nil, inputLossAction: InputLossActionForMsSmoothOut? = nil, numRetries: Int? = nil, restartDelay: Int? = nil, segmentationMode: SmoothGroupSegmentationMode? = nil, sendDelayMs: Int? = nil, sparseTrackType: SmoothGroupSparseTrackType? = nil, streamManifestBehavior: SmoothGroupStreamManifestBehavior? = nil, timestampOffset: String? = nil, timestampOffsetMode: SmoothGroupTimestampOffsetMode? = nil) {
            self.acquisitionPointId = acquisitionPointId
            self.audioOnlyTimecodeControl = audioOnlyTimecodeControl
            self.certificateMode = certificateMode
            self.connectionRetryInterval = connectionRetryInterval
            self.destination = destination
            self.eventId = eventId
            self.eventIdMode = eventIdMode
            self.eventStopBehavior = eventStopBehavior
            self.filecacheDuration = filecacheDuration
            self.fragmentLength = fragmentLength
            self.inputLossAction = inputLossAction
            self.numRetries = numRetries
            self.restartDelay = restartDelay
            self.segmentationMode = segmentationMode
            self.sendDelayMs = sendDelayMs
            self.sparseTrackType = sparseTrackType
            self.streamManifestBehavior = streamManifestBehavior
            self.timestampOffset = timestampOffset
            self.timestampOffsetMode = timestampOffsetMode
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.fragmentLength, name: "fragmentLength", parent: name, min: 1)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
            try self.validate(self.sendDelayMs, name: "sendDelayMs", parent: name, max: 10000)
            try self.validate(self.sendDelayMs, name: "sendDelayMs", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case acquisitionPointId
            case audioOnlyTimecodeControl
            case certificateMode
            case connectionRetryInterval
            case destination
            case eventId
            case eventIdMode
            case eventStopBehavior
            case filecacheDuration
            case fragmentLength
            case inputLossAction
            case numRetries
            case restartDelay
            case segmentationMode
            case sendDelayMs
            case sparseTrackType
            case streamManifestBehavior
            case timestampOffset
            case timestampOffsetMode
        }
    }

    public struct MsSmoothOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Only applicable when this output is referencing an H.265 video description.
        /// Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
        public let h265PackagingType: MsSmoothH265PackagingType?
        /// String concatenated to the end of the destination filename.  Required for multiple outputs of the same type.
        public let nameModifier: String?

        public init(h265PackagingType: MsSmoothH265PackagingType? = nil, nameModifier: String? = nil) {
            self.h265PackagingType = h265PackagingType
            self.nameModifier = nameModifier
        }

        private enum CodingKeys: String, CodingKey {
            case h265PackagingType
            case nameModifier
        }
    }

    public struct Multiplex: AWSDecodableShape {
        /// The unique arn of the multiplex.
        public let arn: String?
        /// A list of availability zones for the multiplex.
        public let availabilityZones: [String]?
        /// A list of the multiplex output destinations.
        public let destinations: [MultiplexOutputDestination]?
        /// The unique id of the multiplex.
        public let id: String?
        /// Configuration for a multiplex event.
        public let multiplexSettings: MultiplexSettings?
        /// The name of the multiplex.
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The number of programs in the multiplex.
        public let programCount: Int?
        /// The current state of the multiplex.
        public let state: MultiplexState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case availabilityZones
            case destinations
            case id
            case multiplexSettings
            case name
            case pipelinesRunningCount
            case programCount
            case state
            case tags
        }
    }

    public struct MultiplexGroupSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct MultiplexMediaConnectOutputDestinationSettings: AWSDecodableShape {
        /// The MediaConnect entitlement ARN available as a Flow source.
        public let entitlementArn: String?

        public init(entitlementArn: String? = nil) {
            self.entitlementArn = entitlementArn
        }

        private enum CodingKeys: String, CodingKey {
            case entitlementArn
        }
    }

    public struct MultiplexOutputDestination: AWSDecodableShape {
        /// Multiplex MediaConnect output destination settings.
        public let mediaConnectSettings: MultiplexMediaConnectOutputDestinationSettings?

        public init(mediaConnectSettings: MultiplexMediaConnectOutputDestinationSettings? = nil) {
            self.mediaConnectSettings = mediaConnectSettings
        }

        private enum CodingKeys: String, CodingKey {
            case mediaConnectSettings
        }
    }

    public struct MultiplexOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Destination is a Multiplex.
        public let destination: OutputLocationRef

        public init(destination: OutputLocationRef) {
            self.destination = destination
        }

        private enum CodingKeys: String, CodingKey {
            case destination
        }
    }

    public struct MultiplexProgram: AWSDecodableShape {
        /// The MediaLive channel associated with the program.
        public let channelId: String?
        /// The settings for this multiplex program.
        public let multiplexProgramSettings: MultiplexProgramSettings?
        /// The packet identifier map for this multiplex program.
        public let packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap?
        /// Contains information about the current sources for the specified program in the specified multiplex. Keep in mind that each multiplex pipeline connects to both pipelines in a given source channel (the channel identified by the program). But only one of those channel pipelines is ever active at one time.
        public let pipelineDetails: [MultiplexProgramPipelineDetail]?
        /// The name of the multiplex program.
        public let programName: String?

        public init(channelId: String? = nil, multiplexProgramSettings: MultiplexProgramSettings? = nil, packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap? = nil, pipelineDetails: [MultiplexProgramPipelineDetail]? = nil, programName: String? = nil) {
            self.channelId = channelId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.packetIdentifiersMap = packetIdentifiersMap
            self.pipelineDetails = pipelineDetails
            self.programName = programName
        }

        private enum CodingKeys: String, CodingKey {
            case channelId
            case multiplexProgramSettings
            case packetIdentifiersMap
            case pipelineDetails
            case programName
        }
    }

    public struct MultiplexProgramChannelDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// The ID of the Multiplex that the encoder is providing output to. You do not need to specify the individual inputs to the Multiplex; MediaLive will handle the connection of the two MediaLive pipelines to the two Multiplex instances.
        /// The Multiplex must be in the same region as the Channel.
        public let multiplexId: String?
        /// The program name of the Multiplex program that the encoder is providing output to.
        public let programName: String?

        public init(multiplexId: String? = nil, programName: String? = nil) {
            self.multiplexId = multiplexId
            self.programName = programName
        }

        public func validate(name: String) throws {
            try self.validate(self.multiplexId, name: "multiplexId", parent: name, min: 1)
            try self.validate(self.programName, name: "programName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexId
            case programName
        }
    }

    public struct MultiplexProgramPacketIdentifiersMap: AWSDecodableShape {
        public let audioPids: [Int]?
        public let dvbSubPids: [Int]?
        public let dvbTeletextPid: Int?
        public let etvPlatformPid: Int?
        public let etvSignalPid: Int?
        public let klvDataPids: [Int]?
        public let pcrPid: Int?
        public let pmtPid: Int?
        public let privateMetadataPid: Int?
        public let scte27Pids: [Int]?
        public let scte35Pid: Int?
        public let timedMetadataPid: Int?
        public let videoPid: Int?

        public init(audioPids: [Int]? = nil, dvbSubPids: [Int]? = nil, dvbTeletextPid: Int? = nil, etvPlatformPid: Int? = nil, etvSignalPid: Int? = nil, klvDataPids: [Int]? = nil, pcrPid: Int? = nil, pmtPid: Int? = nil, privateMetadataPid: Int? = nil, scte27Pids: [Int]? = nil, scte35Pid: Int? = nil, timedMetadataPid: Int? = nil, videoPid: Int? = nil) {
            self.audioPids = audioPids
            self.dvbSubPids = dvbSubPids
            self.dvbTeletextPid = dvbTeletextPid
            self.etvPlatformPid = etvPlatformPid
            self.etvSignalPid = etvSignalPid
            self.klvDataPids = klvDataPids
            self.pcrPid = pcrPid
            self.pmtPid = pmtPid
            self.privateMetadataPid = privateMetadataPid
            self.scte27Pids = scte27Pids
            self.scte35Pid = scte35Pid
            self.timedMetadataPid = timedMetadataPid
            self.videoPid = videoPid
        }

        private enum CodingKeys: String, CodingKey {
            case audioPids
            case dvbSubPids
            case dvbTeletextPid
            case etvPlatformPid
            case etvSignalPid
            case klvDataPids
            case pcrPid
            case pmtPid
            case privateMetadataPid
            case scte27Pids
            case scte35Pid
            case timedMetadataPid
            case videoPid
        }
    }

    public struct MultiplexProgramPipelineDetail: AWSDecodableShape {
        /// Identifies the channel pipeline that is currently active for the pipeline (identified by PipelineId) in the multiplex.
        public let activeChannelPipeline: String?
        /// Identifies a specific pipeline in the multiplex.
        public let pipelineId: String?

        public init(activeChannelPipeline: String? = nil, pipelineId: String? = nil) {
            self.activeChannelPipeline = activeChannelPipeline
            self.pipelineId = pipelineId
        }

        private enum CodingKeys: String, CodingKey {
            case activeChannelPipeline
            case pipelineId
        }
    }

    public struct MultiplexProgramServiceDescriptor: AWSEncodableShape & AWSDecodableShape {
        /// Name of the provider.
        public let providerName: String
        /// Name of the service.
        public let serviceName: String

        public init(providerName: String, serviceName: String) {
            self.providerName = providerName
            self.serviceName = serviceName
        }

        public func validate(name: String) throws {
            try self.validate(self.providerName, name: "providerName", parent: name, max: 256)
            try self.validate(self.serviceName, name: "serviceName", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case providerName
            case serviceName
        }
    }

    public struct MultiplexProgramSettings: AWSEncodableShape & AWSDecodableShape {
        /// Indicates which pipeline is preferred by the multiplex for program ingest.
        public let preferredChannelPipeline: PreferredChannelPipeline?
        /// Unique program number.
        public let programNumber: Int
        /// Transport stream service descriptor configuration for the Multiplex program.
        public let serviceDescriptor: MultiplexProgramServiceDescriptor?
        /// Program video settings configuration.
        public let videoSettings: MultiplexVideoSettings?

        public init(preferredChannelPipeline: PreferredChannelPipeline? = nil, programNumber: Int, serviceDescriptor: MultiplexProgramServiceDescriptor? = nil, videoSettings: MultiplexVideoSettings? = nil) {
            self.preferredChannelPipeline = preferredChannelPipeline
            self.programNumber = programNumber
            self.serviceDescriptor = serviceDescriptor
            self.videoSettings = videoSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.programNumber, name: "programNumber", parent: name, max: 65535)
            try self.validate(self.programNumber, name: "programNumber", parent: name, min: 0)
            try self.serviceDescriptor?.validate(name: "\(name).serviceDescriptor")
            try self.videoSettings?.validate(name: "\(name).videoSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case preferredChannelPipeline
            case programNumber
            case serviceDescriptor
            case videoSettings
        }
    }

    public struct MultiplexProgramSummary: AWSDecodableShape {
        /// The MediaLive Channel associated with the program.
        public let channelId: String?
        /// The name of the multiplex program.
        public let programName: String?

        public init(channelId: String? = nil, programName: String? = nil) {
            self.channelId = channelId
            self.programName = programName
        }

        private enum CodingKeys: String, CodingKey {
            case channelId
            case programName
        }
    }

    public struct MultiplexSettings: AWSEncodableShape & AWSDecodableShape {
        /// Maximum video buffer delay in milliseconds.
        public let maximumVideoBufferDelayMilliseconds: Int?
        /// Transport stream bit rate.
        public let transportStreamBitrate: Int
        /// Transport stream ID.
        public let transportStreamId: Int
        /// Transport stream reserved bit rate.
        public let transportStreamReservedBitrate: Int?

        public init(maximumVideoBufferDelayMilliseconds: Int? = nil, transportStreamBitrate: Int, transportStreamId: Int, transportStreamReservedBitrate: Int? = nil) {
            self.maximumVideoBufferDelayMilliseconds = maximumVideoBufferDelayMilliseconds
            self.transportStreamBitrate = transportStreamBitrate
            self.transportStreamId = transportStreamId
            self.transportStreamReservedBitrate = transportStreamReservedBitrate
        }

        public func validate(name: String) throws {
            try self.validate(self.maximumVideoBufferDelayMilliseconds, name: "maximumVideoBufferDelayMilliseconds", parent: name, max: 3000)
            try self.validate(self.maximumVideoBufferDelayMilliseconds, name: "maximumVideoBufferDelayMilliseconds", parent: name, min: 800)
            try self.validate(self.transportStreamBitrate, name: "transportStreamBitrate", parent: name, max: 100_000_000)
            try self.validate(self.transportStreamBitrate, name: "transportStreamBitrate", parent: name, min: 1_000_000)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, max: 65535)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, min: 0)
            try self.validate(self.transportStreamReservedBitrate, name: "transportStreamReservedBitrate", parent: name, max: 100_000_000)
            try self.validate(self.transportStreamReservedBitrate, name: "transportStreamReservedBitrate", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case maximumVideoBufferDelayMilliseconds
            case transportStreamBitrate
            case transportStreamId
            case transportStreamReservedBitrate
        }
    }

    public struct MultiplexSettingsSummary: AWSDecodableShape {
        /// Transport stream bit rate.
        public let transportStreamBitrate: Int?

        public init(transportStreamBitrate: Int? = nil) {
            self.transportStreamBitrate = transportStreamBitrate
        }

        private enum CodingKeys: String, CodingKey {
            case transportStreamBitrate
        }
    }

    public struct MultiplexStatmuxVideoSettings: AWSEncodableShape & AWSDecodableShape {
        /// Maximum statmux bitrate.
        public let maximumBitrate: Int?
        /// Minimum statmux bitrate.
        public let minimumBitrate: Int?
        /// The purpose of the priority is to use a combination of the\nmultiplex rate control algorithm and the QVBR capability of the\nencoder to prioritize the video quality of some channels in a\nmultiplex over others.  Channels that have a higher priority will\nget higher video quality at the expense of the video quality of\nother channels in the multiplex with lower priority.
        public let priority: Int?

        public init(maximumBitrate: Int? = nil, minimumBitrate: Int? = nil, priority: Int? = nil) {
            self.maximumBitrate = maximumBitrate
            self.minimumBitrate = minimumBitrate
            self.priority = priority
        }

        public func validate(name: String) throws {
            try self.validate(self.maximumBitrate, name: "maximumBitrate", parent: name, max: 100_000_000)
            try self.validate(self.maximumBitrate, name: "maximumBitrate", parent: name, min: 100_000)
            try self.validate(self.minimumBitrate, name: "minimumBitrate", parent: name, max: 100_000_000)
            try self.validate(self.minimumBitrate, name: "minimumBitrate", parent: name, min: 100_000)
            try self.validate(self.priority, name: "priority", parent: name, max: 5)
            try self.validate(self.priority, name: "priority", parent: name, min: -5)
        }

        private enum CodingKeys: String, CodingKey {
            case maximumBitrate
            case minimumBitrate
            case priority
        }
    }

    public struct MultiplexSummary: AWSDecodableShape {
        /// The unique arn of the multiplex.
        public let arn: String?
        /// A list of availability zones for the multiplex.
        public let availabilityZones: [String]?
        /// The unique id of the multiplex.
        public let id: String?
        /// Configuration for a multiplex event.
        public let multiplexSettings: MultiplexSettingsSummary?
        /// The name of the multiplex.
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The number of programs in the multiplex.
        public let programCount: Int?
        /// The current state of the multiplex.
        public let state: MultiplexState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        public init(arn: String? = nil, availabilityZones: [String]? = nil, id: String? = nil, multiplexSettings: MultiplexSettingsSummary? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case availabilityZones
            case id
            case multiplexSettings
            case name
            case pipelinesRunningCount
            case programCount
            case state
            case tags
        }
    }

    public struct MultiplexVideoSettings: AWSEncodableShape & AWSDecodableShape {
        /// The constant bitrate configuration for the video encode.
        /// When this field is defined, StatmuxSettings must be undefined.
        public let constantBitrate: Int?
        /// Statmux rate control settings.
        /// When this field is defined, ConstantBitrate must be undefined.
        public let statmuxSettings: MultiplexStatmuxVideoSettings?

        public init(constantBitrate: Int? = nil, statmuxSettings: MultiplexStatmuxVideoSettings? = nil) {
            self.constantBitrate = constantBitrate
            self.statmuxSettings = statmuxSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.constantBitrate, name: "constantBitrate", parent: name, max: 100_000_000)
            try self.validate(self.constantBitrate, name: "constantBitrate", parent: name, min: 100_000)
            try self.statmuxSettings?.validate(name: "\(name).statmuxSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case constantBitrate
            case statmuxSettings
        }
    }

    public struct NetworkInputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies HLS input settings when the uri is for a HLS manifest.
        public let hlsInputSettings: HlsInputSettings?
        /// Check HTTPS server certificates. When set to checkCryptographyOnly, cryptography in the certificate will be checked, but not the server's name. Certain subdomains (notably S3 buckets that use dots in the bucket name) do not strictly match the corresponding certificate's wildcard pattern and would otherwise cause the event to error. This setting is ignored for protocols that do not use https.
        public let serverValidation: NetworkInputServerValidation?

        public init(hlsInputSettings: HlsInputSettings? = nil, serverValidation: NetworkInputServerValidation? = nil) {
            self.hlsInputSettings = hlsInputSettings
            self.serverValidation = serverValidation
        }

        public func validate(name: String) throws {
            try self.hlsInputSettings?.validate(name: "\(name).hlsInputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case hlsInputSettings
            case serverValidation
        }
    }

    public struct NielsenConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Enter the Distributor ID assigned to your organization by Nielsen.
        public let distributorId: String?
        /// Enables Nielsen PCM to ID3 tagging
        public let nielsenPcmToId3Tagging: NielsenPcmToId3TaggingState?

        public init(distributorId: String? = nil, nielsenPcmToId3Tagging: NielsenPcmToId3TaggingState? = nil) {
            self.distributorId = distributorId
            self.nielsenPcmToId3Tagging = nielsenPcmToId3Tagging
        }

        private enum CodingKeys: String, CodingKey {
            case distributorId
            case nielsenPcmToId3Tagging
        }
    }

    public struct Offering: AWSDecodableShape {
        /// Unique offering ARN, e.g. 'arn:aws:medialive:us-west-2:123456789012:offering:87654321'
        public let arn: String?
        /// Currency code for usagePrice and fixedPrice in ISO-4217 format, e.g. 'USD'
        public let currencyCode: String?
        /// Lease duration, e.g. '12'
        public let duration: Int?
        /// Units for duration, e.g. 'MONTHS'
        public let durationUnits: OfferingDurationUnits?
        /// One-time charge for each reserved resource, e.g. '0.0' for a NO_UPFRONT offering
        public let fixedPrice: Double?
        /// Offering description, e.g. 'HD AVC output at 10-20 Mbps, 30 fps, and standard VQ in US West (Oregon)'
        public let offeringDescription: String?
        /// Unique offering ID, e.g. '87654321'
        public let offeringId: String?
        /// Offering type, e.g. 'NO_UPFRONT'
        public let offeringType: OfferingType?
        /// AWS region, e.g. 'us-west-2'
        public let region: String?
        /// Resource configuration details
        public let resourceSpecification: ReservationResourceSpecification?
        /// Recurring usage charge for each reserved resource, e.g. '157.0'
        public let usagePrice: Double?

        public init(arn: String? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, fixedPrice: Double? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.fixedPrice = fixedPrice
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.resourceSpecification = resourceSpecification
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case currencyCode
            case duration
            case durationUnits
            case fixedPrice
            case offeringDescription
            case offeringId
            case offeringType
            case region
            case resourceSpecification
            case usagePrice
        }
    }

    public struct Output: AWSEncodableShape & AWSDecodableShape {
        /// The names of the AudioDescriptions used as audio sources for this output.
        public let audioDescriptionNames: [String]?
        /// The names of the CaptionDescriptions used as caption sources for this output.
        public let captionDescriptionNames: [String]?
        /// The name used to identify an output.
        public let outputName: String?
        /// Output type-specific settings.
        public let outputSettings: OutputSettings
        /// The name of the VideoDescription used as the source for this output.
        public let videoDescriptionName: String?

        public init(audioDescriptionNames: [String]? = nil, captionDescriptionNames: [String]? = nil, outputName: String? = nil, outputSettings: OutputSettings, videoDescriptionName: String? = nil) {
            self.audioDescriptionNames = audioDescriptionNames
            self.captionDescriptionNames = captionDescriptionNames
            self.outputName = outputName
            self.outputSettings = outputSettings
            self.videoDescriptionName = videoDescriptionName
        }

        public func validate(name: String) throws {
            try self.validate(self.outputName, name: "outputName", parent: name, max: 255)
            try self.validate(self.outputName, name: "outputName", parent: name, min: 1)
            try self.outputSettings.validate(name: "\(name).outputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioDescriptionNames
            case captionDescriptionNames
            case outputName
            case outputSettings
            case videoDescriptionName
        }
    }

    public struct OutputDestination: AWSEncodableShape & AWSDecodableShape {
        /// User-specified id. This is used in an output group or an output.
        public let id: String?
        /// Destination settings for a MediaPackage output; one destination for both encoders.
        public let mediaPackageSettings: [MediaPackageOutputDestinationSettings]?
        /// Destination settings for a Multiplex output; one destination for both encoders.
        public let multiplexSettings: MultiplexProgramChannelDestinationSettings?
        /// Destination settings for a standard output; one destination for each redundant encoder.
        public let settings: [OutputDestinationSettings]?

        public init(id: String? = nil, mediaPackageSettings: [MediaPackageOutputDestinationSettings]? = nil, multiplexSettings: MultiplexProgramChannelDestinationSettings? = nil, settings: [OutputDestinationSettings]? = nil) {
            self.id = id
            self.mediaPackageSettings = mediaPackageSettings
            self.multiplexSettings = multiplexSettings
            self.settings = settings
        }

        public func validate(name: String) throws {
            try self.mediaPackageSettings?.forEach {
                try $0.validate(name: "\(name).mediaPackageSettings[]")
            }
            try self.multiplexSettings?.validate(name: "\(name).multiplexSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case id
            case mediaPackageSettings
            case multiplexSettings
            case settings
        }
    }

    public struct OutputDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// key used to extract the password from EC2 Parameter store
        public let passwordParam: String?
        /// Stream name for RTMP destinations (URLs of type rtmp://)
        public let streamName: String?
        /// A URL specifying a destination
        public let url: String?
        /// username for destination
        public let username: String?

        public init(passwordParam: String? = nil, streamName: String? = nil, url: String? = nil, username: String? = nil) {
            self.passwordParam = passwordParam
            self.streamName = streamName
            self.url = url
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case passwordParam
            case streamName
            case url
            case username
        }
    }

    public struct OutputGroup: AWSEncodableShape & AWSDecodableShape {
        /// Custom output group name optionally defined by the user.  Only letters, numbers, and the underscore character allowed; only 32 characters allowed.
        public let name: String?
        /// Settings associated with the output group.
        public let outputGroupSettings: OutputGroupSettings
        public let outputs: [Output]

        public init(name: String? = nil, outputGroupSettings: OutputGroupSettings, outputs: [Output]) {
            self.name = name
            self.outputGroupSettings = outputGroupSettings
            self.outputs = outputs
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 32)
            try self.outputGroupSettings.validate(name: "\(name).outputGroupSettings")
            try self.outputs.forEach {
                try $0.validate(name: "\(name).outputs[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case name
            case outputGroupSettings
            case outputs
        }
    }

    public struct OutputGroupSettings: AWSEncodableShape & AWSDecodableShape {
        public let archiveGroupSettings: ArchiveGroupSettings?
        public let frameCaptureGroupSettings: FrameCaptureGroupSettings?
        public let hlsGroupSettings: HlsGroupSettings?
        public let mediaPackageGroupSettings: MediaPackageGroupSettings?
        public let msSmoothGroupSettings: MsSmoothGroupSettings?
        public let multiplexGroupSettings: MultiplexGroupSettings?
        public let rtmpGroupSettings: RtmpGroupSettings?
        public let udpGroupSettings: UdpGroupSettings?

        public init(archiveGroupSettings: ArchiveGroupSettings? = nil, frameCaptureGroupSettings: FrameCaptureGroupSettings? = nil, hlsGroupSettings: HlsGroupSettings? = nil, mediaPackageGroupSettings: MediaPackageGroupSettings? = nil, msSmoothGroupSettings: MsSmoothGroupSettings? = nil, multiplexGroupSettings: MultiplexGroupSettings? = nil, rtmpGroupSettings: RtmpGroupSettings? = nil, udpGroupSettings: UdpGroupSettings? = nil) {
            self.archiveGroupSettings = archiveGroupSettings
            self.frameCaptureGroupSettings = frameCaptureGroupSettings
            self.hlsGroupSettings = hlsGroupSettings
            self.mediaPackageGroupSettings = mediaPackageGroupSettings
            self.msSmoothGroupSettings = msSmoothGroupSettings
            self.multiplexGroupSettings = multiplexGroupSettings
            self.rtmpGroupSettings = rtmpGroupSettings
            self.udpGroupSettings = udpGroupSettings
        }

        public func validate(name: String) throws {
            try self.archiveGroupSettings?.validate(name: "\(name).archiveGroupSettings")
            try self.hlsGroupSettings?.validate(name: "\(name).hlsGroupSettings")
            try self.msSmoothGroupSettings?.validate(name: "\(name).msSmoothGroupSettings")
            try self.rtmpGroupSettings?.validate(name: "\(name).rtmpGroupSettings")
            try self.udpGroupSettings?.validate(name: "\(name).udpGroupSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case archiveGroupSettings
            case frameCaptureGroupSettings
            case hlsGroupSettings
            case mediaPackageGroupSettings
            case msSmoothGroupSettings
            case multiplexGroupSettings
            case rtmpGroupSettings
            case udpGroupSettings
        }
    }

    public struct OutputLocationRef: AWSEncodableShape & AWSDecodableShape {
        public let destinationRefId: String?

        public init(destinationRefId: String? = nil) {
            self.destinationRefId = destinationRefId
        }

        private enum CodingKeys: String, CodingKey {
            case destinationRefId
        }
    }

    public struct OutputSettings: AWSEncodableShape & AWSDecodableShape {
        public let archiveOutputSettings: ArchiveOutputSettings?
        public let frameCaptureOutputSettings: FrameCaptureOutputSettings?
        public let hlsOutputSettings: HlsOutputSettings?
        public let mediaPackageOutputSettings: MediaPackageOutputSettings?
        public let msSmoothOutputSettings: MsSmoothOutputSettings?
        public let multiplexOutputSettings: MultiplexOutputSettings?
        public let rtmpOutputSettings: RtmpOutputSettings?
        public let udpOutputSettings: UdpOutputSettings?

        public init(archiveOutputSettings: ArchiveOutputSettings? = nil, frameCaptureOutputSettings: FrameCaptureOutputSettings? = nil, hlsOutputSettings: HlsOutputSettings? = nil, mediaPackageOutputSettings: MediaPackageOutputSettings? = nil, msSmoothOutputSettings: MsSmoothOutputSettings? = nil, multiplexOutputSettings: MultiplexOutputSettings? = nil, rtmpOutputSettings: RtmpOutputSettings? = nil, udpOutputSettings: UdpOutputSettings? = nil) {
            self.archiveOutputSettings = archiveOutputSettings
            self.frameCaptureOutputSettings = frameCaptureOutputSettings
            self.hlsOutputSettings = hlsOutputSettings
            self.mediaPackageOutputSettings = mediaPackageOutputSettings
            self.msSmoothOutputSettings = msSmoothOutputSettings
            self.multiplexOutputSettings = multiplexOutputSettings
            self.rtmpOutputSettings = rtmpOutputSettings
            self.udpOutputSettings = udpOutputSettings
        }

        public func validate(name: String) throws {
            try self.archiveOutputSettings?.validate(name: "\(name).archiveOutputSettings")
            try self.hlsOutputSettings?.validate(name: "\(name).hlsOutputSettings")
            try self.rtmpOutputSettings?.validate(name: "\(name).rtmpOutputSettings")
            try self.udpOutputSettings?.validate(name: "\(name).udpOutputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case archiveOutputSettings
            case frameCaptureOutputSettings
            case hlsOutputSettings
            case mediaPackageOutputSettings
            case msSmoothOutputSettings
            case multiplexOutputSettings
            case rtmpOutputSettings
            case udpOutputSettings
        }
    }

    public struct PassThroughSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct PauseStateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        public let pipelines: [PipelinePauseStateSettings]?

        public init(pipelines: [PipelinePauseStateSettings]? = nil) {
            self.pipelines = pipelines
        }

        private enum CodingKeys: String, CodingKey {
            case pipelines
        }
    }

    public struct PipelineDetail: AWSDecodableShape {
        /// The name of the active input attachment currently being ingested by this pipeline.
        public let activeInputAttachmentName: String?
        /// The name of the input switch schedule action that occurred most recently and that resulted in the switch to the current input attachment for this pipeline.
        public let activeInputSwitchActionName: String?
        /// Pipeline ID
        public let pipelineId: String?

        public init(activeInputAttachmentName: String? = nil, activeInputSwitchActionName: String? = nil, pipelineId: String? = nil) {
            self.activeInputAttachmentName = activeInputAttachmentName
            self.activeInputSwitchActionName = activeInputSwitchActionName
            self.pipelineId = pipelineId
        }

        private enum CodingKeys: String, CodingKey {
            case activeInputAttachmentName
            case activeInputSwitchActionName
            case pipelineId
        }
    }

    public struct PipelinePauseStateSettings: AWSEncodableShape & AWSDecodableShape {
        /// Pipeline ID to pause ("PIPELINE_0" or "PIPELINE_1").
        public let pipelineId: PipelineId

        public init(pipelineId: PipelineId) {
            self.pipelineId = pipelineId
        }

        private enum CodingKeys: String, CodingKey {
            case pipelineId
        }
    }

    public struct PurchaseOfferingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "offeringId", location: .uri(locationName: "offeringId"))
        ]

        public let count: Int
        public let name: String?
        public let offeringId: String
        public let requestId: String?
        public let start: String?
        public let tags: [String: String]?

        public init(count: Int, name: String? = nil, offeringId: String, requestId: String? = PurchaseOfferingRequest.idempotencyToken(), start: String? = nil, tags: [String: String]? = nil) {
            self.count = count
            self.name = name
            self.offeringId = offeringId
            self.requestId = requestId
            self.start = start
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.count, name: "count", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case count
            case name
            case requestId
            case start
            case tags
        }
    }

    public struct PurchaseOfferingResponse: AWSDecodableShape {
        public let reservation: Reservation?

        public init(reservation: Reservation? = nil) {
            self.reservation = reservation
        }

        private enum CodingKeys: String, CodingKey {
            case reservation
        }
    }

    public struct RawSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Rec601Settings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Rec709Settings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct RejectInputDeviceTransferRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputDeviceId", location: .uri(locationName: "inputDeviceId"))
        ]

        public let inputDeviceId: String

        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RejectInputDeviceTransferResponse: AWSDecodableShape {
        public init() {}
    }

    public struct RemixSettings: AWSEncodableShape & AWSDecodableShape {
        /// Mapping of input channels to output channels, with appropriate gain adjustments.
        public let channelMappings: [AudioChannelMapping]
        /// Number of input channels to be used.
        public let channelsIn: Int?
        /// Number of output channels to be produced.
        /// Valid values: 1, 2, 4, 6, 8
        public let channelsOut: Int?

        public init(channelMappings: [AudioChannelMapping], channelsIn: Int? = nil, channelsOut: Int? = nil) {
            self.channelMappings = channelMappings
            self.channelsIn = channelsIn
            self.channelsOut = channelsOut
        }

        public func validate(name: String) throws {
            try self.channelMappings.forEach {
                try $0.validate(name: "\(name).channelMappings[]")
            }
            try self.validate(self.channelsIn, name: "channelsIn", parent: name, max: 16)
            try self.validate(self.channelsIn, name: "channelsIn", parent: name, min: 1)
            try self.validate(self.channelsOut, name: "channelsOut", parent: name, max: 8)
            try self.validate(self.channelsOut, name: "channelsOut", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case channelMappings
            case channelsIn
            case channelsOut
        }
    }

    public struct Reservation: AWSDecodableShape {
        /// Unique reservation ARN, e.g. 'arn:aws:medialive:us-west-2:123456789012:reservation:1234567'
        public let arn: String?
        /// Number of reserved resources
        public let count: Int?
        /// Currency code for usagePrice and fixedPrice in ISO-4217 format, e.g. 'USD'
        public let currencyCode: String?
        /// Lease duration, e.g. '12'
        public let duration: Int?
        /// Units for duration, e.g. 'MONTHS'
        public let durationUnits: OfferingDurationUnits?
        /// Reservation UTC end date and time in ISO-8601 format, e.g. '2019-03-01T00:00:00'
        public let end: String?
        /// One-time charge for each reserved resource, e.g. '0.0' for a NO_UPFRONT offering
        public let fixedPrice: Double?
        /// User specified reservation name
        public let name: String?
        /// Offering description, e.g. 'HD AVC output at 10-20 Mbps, 30 fps, and standard VQ in US West (Oregon)'
        public let offeringDescription: String?
        /// Unique offering ID, e.g. '87654321'
        public let offeringId: String?
        /// Offering type, e.g. 'NO_UPFRONT'
        public let offeringType: OfferingType?
        /// AWS region, e.g. 'us-west-2'
        public let region: String?
        /// Unique reservation ID, e.g. '1234567'
        public let reservationId: String?
        /// Resource configuration details
        public let resourceSpecification: ReservationResourceSpecification?
        /// Reservation UTC start date and time in ISO-8601 format, e.g. '2018-03-01T00:00:00'
        public let start: String?
        /// Current state of reservation, e.g. 'ACTIVE'
        public let state: ReservationState?
        /// A collection of key-value pairs
        public let tags: [String: String]?
        /// Recurring usage charge for each reserved resource, e.g. '157.0'
        public let usagePrice: Double?

        public init(arn: String? = nil, count: Int? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, end: String? = nil, fixedPrice: Double? = nil, name: String? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, reservationId: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, start: String? = nil, state: ReservationState? = nil, tags: [String: String]? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.count = count
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.end = end
            self.fixedPrice = fixedPrice
            self.name = name
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.reservationId = reservationId
            self.resourceSpecification = resourceSpecification
            self.start = start
            self.state = state
            self.tags = tags
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case count
            case currencyCode
            case duration
            case durationUnits
            case end
            case fixedPrice
            case name
            case offeringDescription
            case offeringId
            case offeringType
            case region
            case reservationId
            case resourceSpecification
            case start
            case state
            case tags
            case usagePrice
        }
    }

    public struct ReservationResourceSpecification: AWSDecodableShape {
        /// Channel class, e.g. 'STANDARD'
        public let channelClass: ChannelClass?
        /// Codec, e.g. 'AVC'
        public let codec: ReservationCodec?
        /// Maximum bitrate, e.g. 'MAX_20_MBPS'
        public let maximumBitrate: ReservationMaximumBitrate?
        /// Maximum framerate, e.g. 'MAX_30_FPS' (Outputs only)
        public let maximumFramerate: ReservationMaximumFramerate?
        /// Resolution, e.g. 'HD'
        public let resolution: ReservationResolution?
        /// Resource type, 'INPUT', 'OUTPUT', 'MULTIPLEX', or 'CHANNEL'
        public let resourceType: ReservationResourceType?
        /// Special feature, e.g. 'AUDIO_NORMALIZATION' (Channels only)
        public let specialFeature: ReservationSpecialFeature?
        /// Video quality, e.g. 'STANDARD' (Outputs only)
        public let videoQuality: ReservationVideoQuality?

        public init(channelClass: ChannelClass? = nil, codec: ReservationCodec? = nil, maximumBitrate: ReservationMaximumBitrate? = nil, maximumFramerate: ReservationMaximumFramerate? = nil, resolution: ReservationResolution? = nil, resourceType: ReservationResourceType? = nil, specialFeature: ReservationSpecialFeature? = nil, videoQuality: ReservationVideoQuality? = nil) {
            self.channelClass = channelClass
            self.codec = codec
            self.maximumBitrate = maximumBitrate
            self.maximumFramerate = maximumFramerate
            self.resolution = resolution
            self.resourceType = resourceType
            self.specialFeature = specialFeature
            self.videoQuality = videoQuality
        }

        private enum CodingKeys: String, CodingKey {
            case channelClass
            case codec
            case maximumBitrate
            case maximumFramerate
            case resolution
            case resourceType
            case specialFeature
            case videoQuality
        }
    }

    public struct RtmpCaptionInfoDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct RtmpGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Choose the ad marker type for this output group. MediaLive will create a message based on the content of each SCTE-35 message, format it for that marker type, and insert it in the datastream.
        public let adMarkers: [RtmpAdMarkers]?
        /// Authentication scheme to use when connecting with CDN
        public let authenticationScheme: AuthenticationScheme?
        /// Controls behavior when content cache fills up. If remote origin server stalls the RTMP connection and does not accept content fast enough the 'Media Cache' will fill up. When the cache reaches the duration specified by cacheLength the cache will stop accepting new content. If set to disconnectImmediately, the RTMP output will force a disconnect. Clear the media cache, and reconnect after restartDelay seconds. If set to waitForServer, the RTMP output will wait up to 5 minutes to allow the origin server to begin accepting data again.
        public let cacheFullBehavior: RtmpCacheFullBehavior?
        /// Cache length, in seconds, is used to calculate buffer size.
        public let cacheLength: Int?
        /// Controls the types of data that passes to onCaptionInfo outputs.  If set to 'all' then 608 and 708 carried DTVCC data will be passed.  If set to 'field1AndField2608' then DTVCC data will be stripped out, but 608 data from both fields will be passed. If set to 'field1608' then only the data carried in 608 from field 1 video will be passed.
        public let captionData: RtmpCaptionData?
        /// Controls the behavior of this RTMP group if input becomes unavailable.
        /// - emitOutput: Emit a slate until input returns.
        /// - pauseOutput: Stop transmitting data until input returns. This does not close the underlying RTMP connection.
        public let inputLossAction: InputLossActionForRtmpOut?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?

        public init(adMarkers: [RtmpAdMarkers]? = nil, authenticationScheme: AuthenticationScheme? = nil, cacheFullBehavior: RtmpCacheFullBehavior? = nil, cacheLength: Int? = nil, captionData: RtmpCaptionData? = nil, inputLossAction: InputLossActionForRtmpOut? = nil, restartDelay: Int? = nil) {
            self.adMarkers = adMarkers
            self.authenticationScheme = authenticationScheme
            self.cacheFullBehavior = cacheFullBehavior
            self.cacheLength = cacheLength
            self.captionData = captionData
            self.inputLossAction = inputLossAction
            self.restartDelay = restartDelay
        }

        public func validate(name: String) throws {
            try self.validate(self.cacheLength, name: "cacheLength", parent: name, min: 30)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case adMarkers
            case authenticationScheme
            case cacheFullBehavior
            case cacheLength
            case captionData
            case inputLossAction
            case restartDelay
        }
    }

    public struct RtmpOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// If set to verifyAuthenticity, verify the tls certificate chain to a trusted Certificate Authority (CA).  This will cause rtmps outputs with self-signed certificates to fail.
        public let certificateMode: RtmpOutputCertificateMode?
        /// Number of seconds to wait before retrying a connection to the Flash Media server if the connection is lost.
        public let connectionRetryInterval: Int?
        /// The RTMP endpoint excluding the stream name (eg. rtmp://host/appname). For connection to Akamai, a username and password must be supplied. URI fields accept format identifiers.
        public let destination: OutputLocationRef
        /// Number of retry attempts.
        public let numRetries: Int?

        public init(certificateMode: RtmpOutputCertificateMode? = nil, connectionRetryInterval: Int? = nil, destination: OutputLocationRef, numRetries: Int? = nil) {
            self.certificateMode = certificateMode
            self.connectionRetryInterval = connectionRetryInterval
            self.destination = destination
            self.numRetries = numRetries
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 1)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case certificateMode
            case connectionRetryInterval
            case destination
            case numRetries
        }
    }

    public struct ScheduleAction: AWSEncodableShape & AWSDecodableShape {
        /// The name of the action, must be unique within the schedule. This name provides the main reference to an action once it is added to the schedule. A name is unique if it is no longer in the schedule. The schedule is automatically cleaned up to remove actions with a start time of more than 1 hour ago (approximately) so at that point a name can be reused.
        public let actionName: String
        /// Settings for this schedule action.
        public let scheduleActionSettings: ScheduleActionSettings
        /// The time for the action to start in the channel.
        public let scheduleActionStartSettings: ScheduleActionStartSettings

        public init(actionName: String, scheduleActionSettings: ScheduleActionSettings, scheduleActionStartSettings: ScheduleActionStartSettings) {
            self.actionName = actionName
            self.scheduleActionSettings = scheduleActionSettings
            self.scheduleActionStartSettings = scheduleActionStartSettings
        }

        public func validate(name: String) throws {
            try self.scheduleActionSettings.validate(name: "\(name).scheduleActionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case actionName
            case scheduleActionSettings
            case scheduleActionStartSettings
        }
    }

    public struct ScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Action to insert HLS ID3 segment tagging
        public let hlsId3SegmentTaggingSettings: HlsId3SegmentTaggingScheduleActionSettings?
        /// Action to insert HLS metadata
        public let hlsTimedMetadataSettings: HlsTimedMetadataScheduleActionSettings?
        /// Action to prepare an input for a future immediate input switch
        public let inputPrepareSettings: InputPrepareScheduleActionSettings?
        /// Action to switch the input
        public let inputSwitchSettings: InputSwitchScheduleActionSettings?
        /// Action to pause or unpause one or both channel pipelines
        public let pauseStateSettings: PauseStateScheduleActionSettings?
        /// Action to insert SCTE-35 return_to_network message
        public let scte35ReturnToNetworkSettings: Scte35ReturnToNetworkScheduleActionSettings?
        /// Action to insert SCTE-35 splice_insert message
        public let scte35SpliceInsertSettings: Scte35SpliceInsertScheduleActionSettings?
        /// Action to insert SCTE-35 time_signal message
        public let scte35TimeSignalSettings: Scte35TimeSignalScheduleActionSettings?
        /// Action to activate a static image overlay
        public let staticImageActivateSettings: StaticImageActivateScheduleActionSettings?
        /// Action to deactivate a static image overlay
        public let staticImageDeactivateSettings: StaticImageDeactivateScheduleActionSettings?

        public init(hlsId3SegmentTaggingSettings: HlsId3SegmentTaggingScheduleActionSettings? = nil, hlsTimedMetadataSettings: HlsTimedMetadataScheduleActionSettings? = nil, inputPrepareSettings: InputPrepareScheduleActionSettings? = nil, inputSwitchSettings: InputSwitchScheduleActionSettings? = nil, pauseStateSettings: PauseStateScheduleActionSettings? = nil, scte35ReturnToNetworkSettings: Scte35ReturnToNetworkScheduleActionSettings? = nil, scte35SpliceInsertSettings: Scte35SpliceInsertScheduleActionSettings? = nil, scte35TimeSignalSettings: Scte35TimeSignalScheduleActionSettings? = nil, staticImageActivateSettings: StaticImageActivateScheduleActionSettings? = nil, staticImageDeactivateSettings: StaticImageDeactivateScheduleActionSettings? = nil) {
            self.hlsId3SegmentTaggingSettings = hlsId3SegmentTaggingSettings
            self.hlsTimedMetadataSettings = hlsTimedMetadataSettings
            self.inputPrepareSettings = inputPrepareSettings
            self.inputSwitchSettings = inputSwitchSettings
            self.pauseStateSettings = pauseStateSettings
            self.scte35ReturnToNetworkSettings = scte35ReturnToNetworkSettings
            self.scte35SpliceInsertSettings = scte35SpliceInsertSettings
            self.scte35TimeSignalSettings = scte35TimeSignalSettings
            self.staticImageActivateSettings = staticImageActivateSettings
            self.staticImageDeactivateSettings = staticImageDeactivateSettings
        }

        public func validate(name: String) throws {
            try self.scte35ReturnToNetworkSettings?.validate(name: "\(name).scte35ReturnToNetworkSettings")
            try self.scte35SpliceInsertSettings?.validate(name: "\(name).scte35SpliceInsertSettings")
            try self.scte35TimeSignalSettings?.validate(name: "\(name).scte35TimeSignalSettings")
            try self.staticImageActivateSettings?.validate(name: "\(name).staticImageActivateSettings")
            try self.staticImageDeactivateSettings?.validate(name: "\(name).staticImageDeactivateSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case hlsId3SegmentTaggingSettings
            case hlsTimedMetadataSettings
            case inputPrepareSettings
            case inputSwitchSettings
            case pauseStateSettings
            case scte35ReturnToNetworkSettings
            case scte35SpliceInsertSettings
            case scte35TimeSignalSettings
            case staticImageActivateSettings
            case staticImageDeactivateSettings
        }
    }

    public struct ScheduleActionStartSettings: AWSEncodableShape & AWSDecodableShape {
        /// Option for specifying the start time for an action.
        public let fixedModeScheduleActionStartSettings: FixedModeScheduleActionStartSettings?
        /// Option for specifying an action as relative to another action.
        public let followModeScheduleActionStartSettings: FollowModeScheduleActionStartSettings?
        /// Option for specifying an action that should be applied immediately.
        public let immediateModeScheduleActionStartSettings: ImmediateModeScheduleActionStartSettings?

        public init(fixedModeScheduleActionStartSettings: FixedModeScheduleActionStartSettings? = nil, followModeScheduleActionStartSettings: FollowModeScheduleActionStartSettings? = nil, immediateModeScheduleActionStartSettings: ImmediateModeScheduleActionStartSettings? = nil) {
            self.fixedModeScheduleActionStartSettings = fixedModeScheduleActionStartSettings
            self.followModeScheduleActionStartSettings = followModeScheduleActionStartSettings
            self.immediateModeScheduleActionStartSettings = immediateModeScheduleActionStartSettings
        }

        private enum CodingKeys: String, CodingKey {
            case fixedModeScheduleActionStartSettings
            case followModeScheduleActionStartSettings
            case immediateModeScheduleActionStartSettings
        }
    }

    public struct Scte20PlusEmbeddedDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Scte20SourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// If upconvert, 608 data is both passed through via the "608 compatibility bytes" fields of the 708 wrapper as well as translated into 708. 708 data present in the source content will be discarded.
        public let convert608To708: Scte20Convert608To708?
        /// Specifies the 608/708 channel number within the video track from which to extract captions. Unused for passthrough.
        public let source608ChannelNumber: Int?

        public init(convert608To708: Scte20Convert608To708? = nil, source608ChannelNumber: Int? = nil) {
            self.convert608To708 = convert608To708
            self.source608ChannelNumber = source608ChannelNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.source608ChannelNumber, name: "source608ChannelNumber", parent: name, max: 4)
            try self.validate(self.source608ChannelNumber, name: "source608ChannelNumber", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case convert608To708
            case source608ChannelNumber
        }
    }

    public struct Scte27DestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Scte27SourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// The pid field is used in conjunction with the caption selector languageCode field as follows:
        ///   - Specify PID and Language: Extracts captions from that PID; the language is "informational".
        ///   - Specify PID and omit Language: Extracts the specified PID.
        ///   - Omit PID and specify Language: Extracts the specified language, whichever PID that happens to be.
        ///   - Omit PID and omit Language: Valid only if source is DVB-Sub that is being passed through; all languages will be passed through.
        public let pid: Int?

        public init(pid: Int? = nil) {
            self.pid = pid
        }

        public func validate(name: String) throws {
            try self.validate(self.pid, name: "pid", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case pid
        }
    }

    public struct Scte35DeliveryRestrictions: AWSEncodableShape & AWSDecodableShape {
        /// Corresponds to SCTE-35 archive_allowed_flag.
        public let archiveAllowedFlag: Scte35ArchiveAllowedFlag
        /// Corresponds to SCTE-35 device_restrictions parameter.
        public let deviceRestrictions: Scte35DeviceRestrictions
        /// Corresponds to SCTE-35 no_regional_blackout_flag parameter.
        public let noRegionalBlackoutFlag: Scte35NoRegionalBlackoutFlag
        /// Corresponds to SCTE-35 web_delivery_allowed_flag parameter.
        public let webDeliveryAllowedFlag: Scte35WebDeliveryAllowedFlag

        public init(archiveAllowedFlag: Scte35ArchiveAllowedFlag, deviceRestrictions: Scte35DeviceRestrictions, noRegionalBlackoutFlag: Scte35NoRegionalBlackoutFlag, webDeliveryAllowedFlag: Scte35WebDeliveryAllowedFlag) {
            self.archiveAllowedFlag = archiveAllowedFlag
            self.deviceRestrictions = deviceRestrictions
            self.noRegionalBlackoutFlag = noRegionalBlackoutFlag
            self.webDeliveryAllowedFlag = webDeliveryAllowedFlag
        }

        private enum CodingKeys: String, CodingKey {
            case archiveAllowedFlag
            case deviceRestrictions
            case noRegionalBlackoutFlag
            case webDeliveryAllowedFlag
        }
    }

    public struct Scte35Descriptor: AWSEncodableShape & AWSDecodableShape {
        /// SCTE-35 Descriptor Settings.
        public let scte35DescriptorSettings: Scte35DescriptorSettings

        public init(scte35DescriptorSettings: Scte35DescriptorSettings) {
            self.scte35DescriptorSettings = scte35DescriptorSettings
        }

        public func validate(name: String) throws {
            try self.scte35DescriptorSettings.validate(name: "\(name).scte35DescriptorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case scte35DescriptorSettings
        }
    }

    public struct Scte35DescriptorSettings: AWSEncodableShape & AWSDecodableShape {
        /// SCTE-35 Segmentation Descriptor.
        public let segmentationDescriptorScte35DescriptorSettings: Scte35SegmentationDescriptor

        public init(segmentationDescriptorScte35DescriptorSettings: Scte35SegmentationDescriptor) {
            self.segmentationDescriptorScte35DescriptorSettings = segmentationDescriptorScte35DescriptorSettings
        }

        public func validate(name: String) throws {
            try self.segmentationDescriptorScte35DescriptorSettings.validate(name: "\(name).segmentationDescriptorScte35DescriptorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case segmentationDescriptorScte35DescriptorSettings
        }
    }

    public struct Scte35ReturnToNetworkScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The splice_event_id for the SCTE-35 splice_insert, as defined in SCTE-35.
        public let spliceEventId: Int64

        public init(spliceEventId: Int64) {
            self.spliceEventId = spliceEventId
        }

        public func validate(name: String) throws {
            try self.validate(self.spliceEventId, name: "spliceEventId", parent: name, max: 4_294_967_295)
            try self.validate(self.spliceEventId, name: "spliceEventId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case spliceEventId
        }
    }

    public struct Scte35SegmentationDescriptor: AWSEncodableShape & AWSDecodableShape {
        /// Holds the four SCTE-35 delivery restriction parameters.
        public let deliveryRestrictions: Scte35DeliveryRestrictions?
        /// Corresponds to SCTE-35 segmentation_event_cancel_indicator.
        public let segmentationCancelIndicator: Scte35SegmentationCancelIndicator
        /// Corresponds to SCTE-35 segmentation_duration. Optional. The duration for the time_signal, in 90 KHz ticks. To convert seconds to ticks, multiple the seconds by 90,000. Enter time in 90 KHz clock ticks. If you do not enter a duration, the time_signal will continue until you insert a cancellation message.
        public let segmentationDuration: Int64?
        /// Corresponds to SCTE-35 segmentation_event_id.
        public let segmentationEventId: Int64
        /// Corresponds to SCTE-35 segmentation_type_id. One of the segmentation_type_id values listed in the SCTE-35 specification. On the console, enter the ID in decimal (for example, "52"). In the CLI, API, or an SDK, enter the ID in hex (for example, "0x34") or decimal (for example, "52").
        public let segmentationTypeId: Int?
        /// Corresponds to SCTE-35 segmentation_upid. Enter a string containing the hexadecimal representation of the characters that make up the SCTE-35 segmentation_upid value. Must contain an even number of hex characters. Do not include spaces between each hex pair. For example, the ASCII "ADS Information" becomes hex "41445320496e666f726d6174696f6e.
        public let segmentationUpid: String?
        /// Corresponds to SCTE-35 segmentation_upid_type. On the console, enter one of the types listed in the SCTE-35 specification, converted to a decimal. For example, "0x0C" hex from the specification is "12" in decimal. In the CLI, API, or an SDK, enter one of the types listed in the SCTE-35 specification, in either hex (for example, "0x0C" ) or in decimal (for example, "12").
        public let segmentationUpidType: Int?
        /// Corresponds to SCTE-35 segment_num. A value that is valid for the specified segmentation_type_id.
        public let segmentNum: Int?
        /// Corresponds to SCTE-35 segments_expected. A value that is valid for the specified segmentation_type_id.
        public let segmentsExpected: Int?
        /// Corresponds to SCTE-35 sub_segment_num. A value that is valid for the specified segmentation_type_id.
        public let subSegmentNum: Int?
        /// Corresponds to SCTE-35 sub_segments_expected. A value that is valid for the specified segmentation_type_id.
        public let subSegmentsExpected: Int?

        public init(deliveryRestrictions: Scte35DeliveryRestrictions? = nil, segmentationCancelIndicator: Scte35SegmentationCancelIndicator, segmentationDuration: Int64? = nil, segmentationEventId: Int64, segmentationTypeId: Int? = nil, segmentationUpid: String? = nil, segmentationUpidType: Int? = nil, segmentNum: Int? = nil, segmentsExpected: Int? = nil, subSegmentNum: Int? = nil, subSegmentsExpected: Int? = nil) {
            self.deliveryRestrictions = deliveryRestrictions
            self.segmentationCancelIndicator = segmentationCancelIndicator
            self.segmentationDuration = segmentationDuration
            self.segmentationEventId = segmentationEventId
            self.segmentationTypeId = segmentationTypeId
            self.segmentationUpid = segmentationUpid
            self.segmentationUpidType = segmentationUpidType
            self.segmentNum = segmentNum
            self.segmentsExpected = segmentsExpected
            self.subSegmentNum = subSegmentNum
            self.subSegmentsExpected = subSegmentsExpected
        }

        public func validate(name: String) throws {
            try self.validate(self.segmentationDuration, name: "segmentationDuration", parent: name, max: 1_099_511_627_775)
            try self.validate(self.segmentationDuration, name: "segmentationDuration", parent: name, min: 0)
            try self.validate(self.segmentationEventId, name: "segmentationEventId", parent: name, max: 4_294_967_295)
            try self.validate(self.segmentationEventId, name: "segmentationEventId", parent: name, min: 0)
            try self.validate(self.segmentationTypeId, name: "segmentationTypeId", parent: name, max: 255)
            try self.validate(self.segmentationTypeId, name: "segmentationTypeId", parent: name, min: 0)
            try self.validate(self.segmentationUpidType, name: "segmentationUpidType", parent: name, max: 255)
            try self.validate(self.segmentationUpidType, name: "segmentationUpidType", parent: name, min: 0)
            try self.validate(self.segmentNum, name: "segmentNum", parent: name, max: 255)
            try self.validate(self.segmentNum, name: "segmentNum", parent: name, min: 0)
            try self.validate(self.segmentsExpected, name: "segmentsExpected", parent: name, max: 255)
            try self.validate(self.segmentsExpected, name: "segmentsExpected", parent: name, min: 0)
            try self.validate(self.subSegmentNum, name: "subSegmentNum", parent: name, max: 255)
            try self.validate(self.subSegmentNum, name: "subSegmentNum", parent: name, min: 0)
            try self.validate(self.subSegmentsExpected, name: "subSegmentsExpected", parent: name, max: 255)
            try self.validate(self.subSegmentsExpected, name: "subSegmentsExpected", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case deliveryRestrictions
            case segmentationCancelIndicator
            case segmentationDuration
            case segmentationEventId
            case segmentationTypeId
            case segmentationUpid
            case segmentationUpidType
            case segmentNum
            case segmentsExpected
            case subSegmentNum
            case subSegmentsExpected
        }
    }

    public struct Scte35SpliceInsert: AWSEncodableShape & AWSDecodableShape {
        /// When specified, this offset (in milliseconds) is added to the input Ad Avail PTS time. This only applies to embedded SCTE 104/35 messages and does not apply to OOB messages.
        public let adAvailOffset: Int?
        /// When set to ignore, Segment Descriptors with noRegionalBlackoutFlag set to 0 will no longer trigger blackouts or Ad Avail slates
        public let noRegionalBlackoutFlag: Scte35SpliceInsertNoRegionalBlackoutBehavior?
        /// When set to ignore, Segment Descriptors with webDeliveryAllowedFlag set to 0 will no longer trigger blackouts or Ad Avail slates
        public let webDeliveryAllowedFlag: Scte35SpliceInsertWebDeliveryAllowedBehavior?

        public init(adAvailOffset: Int? = nil, noRegionalBlackoutFlag: Scte35SpliceInsertNoRegionalBlackoutBehavior? = nil, webDeliveryAllowedFlag: Scte35SpliceInsertWebDeliveryAllowedBehavior? = nil) {
            self.adAvailOffset = adAvailOffset
            self.noRegionalBlackoutFlag = noRegionalBlackoutFlag
            self.webDeliveryAllowedFlag = webDeliveryAllowedFlag
        }

        public func validate(name: String) throws {
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, max: 1000)
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, min: -1000)
        }

        private enum CodingKeys: String, CodingKey {
            case adAvailOffset
            case noRegionalBlackoutFlag
            case webDeliveryAllowedFlag
        }
    }

    public struct Scte35SpliceInsertScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Optional, the duration for the splice_insert, in 90 KHz ticks. To convert seconds to ticks, multiple the seconds by 90,000. If you enter a duration, there is an expectation that the downstream system can read the duration and cue in at that time. If you do not enter a duration, the splice_insert will continue indefinitely and there is an expectation that you will enter a return_to_network to end the splice_insert at the appropriate time.
        public let duration: Int64?
        /// The splice_event_id for the SCTE-35 splice_insert, as defined in SCTE-35.
        public let spliceEventId: Int64

        public init(duration: Int64? = nil, spliceEventId: Int64) {
            self.duration = duration
            self.spliceEventId = spliceEventId
        }

        public func validate(name: String) throws {
            try self.validate(self.duration, name: "duration", parent: name, max: 8_589_934_591)
            try self.validate(self.duration, name: "duration", parent: name, min: 0)
            try self.validate(self.spliceEventId, name: "spliceEventId", parent: name, max: 4_294_967_295)
            try self.validate(self.spliceEventId, name: "spliceEventId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case duration
            case spliceEventId
        }
    }

    public struct Scte35TimeSignalApos: AWSEncodableShape & AWSDecodableShape {
        /// When specified, this offset (in milliseconds) is added to the input Ad Avail PTS time. This only applies to embedded SCTE 104/35 messages and does not apply to OOB messages.
        public let adAvailOffset: Int?
        /// When set to ignore, Segment Descriptors with noRegionalBlackoutFlag set to 0 will no longer trigger blackouts or Ad Avail slates
        public let noRegionalBlackoutFlag: Scte35AposNoRegionalBlackoutBehavior?
        /// When set to ignore, Segment Descriptors with webDeliveryAllowedFlag set to 0 will no longer trigger blackouts or Ad Avail slates
        public let webDeliveryAllowedFlag: Scte35AposWebDeliveryAllowedBehavior?

        public init(adAvailOffset: Int? = nil, noRegionalBlackoutFlag: Scte35AposNoRegionalBlackoutBehavior? = nil, webDeliveryAllowedFlag: Scte35AposWebDeliveryAllowedBehavior? = nil) {
            self.adAvailOffset = adAvailOffset
            self.noRegionalBlackoutFlag = noRegionalBlackoutFlag
            self.webDeliveryAllowedFlag = webDeliveryAllowedFlag
        }

        public func validate(name: String) throws {
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, max: 1000)
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, min: -1000)
        }

        private enum CodingKeys: String, CodingKey {
            case adAvailOffset
            case noRegionalBlackoutFlag
            case webDeliveryAllowedFlag
        }
    }

    public struct Scte35TimeSignalScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The list of SCTE-35 descriptors accompanying the SCTE-35 time_signal.
        public let scte35Descriptors: [Scte35Descriptor]

        public init(scte35Descriptors: [Scte35Descriptor]) {
            self.scte35Descriptors = scte35Descriptors
        }

        public func validate(name: String) throws {
            try self.scte35Descriptors.forEach {
                try $0.validate(name: "\(name).scte35Descriptors[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case scte35Descriptors
        }
    }

    public struct SmpteTtDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct StandardHlsSettings: AWSEncodableShape & AWSDecodableShape {
        /// List all the audio groups that are used with the video output stream. Input all the audio GROUP-IDs that are associated to the video, separate by ','.
        public let audioRenditionSets: String?
        public let m3u8Settings: M3u8Settings

        public init(audioRenditionSets: String? = nil, m3u8Settings: M3u8Settings) {
            self.audioRenditionSets = audioRenditionSets
            self.m3u8Settings = m3u8Settings
        }

        public func validate(name: String) throws {
            try self.m3u8Settings.validate(name: "\(name).m3u8Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioRenditionSets
            case m3u8Settings
        }
    }

    public struct StartChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelId", location: .uri(locationName: "channelId"))
        ]

        public let channelId: String

        public init(channelId: String) {
            self.channelId = channelId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StartChannelResponse: AWSDecodableShape {
        public let arn: String?
        public let cdiInputSpecification: CdiInputSpecification?
        public let channelClass: ChannelClass?
        public let destinations: [OutputDestination]?
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        public let id: String?
        public let inputAttachments: [InputAttachment]?
        public let inputSpecification: InputSpecification?
        public let logLevel: LogLevel?
        public let name: String?
        public let pipelineDetails: [PipelineDetail]?
        public let pipelinesRunningCount: Int?
        public let roleArn: String?
        public let state: ChannelState?
        public let tags: [String: String]?
        public let vpc: VpcOutputSettings?

        public init(arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettings? = nil) {
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case cdiInputSpecification
            case channelClass
            case destinations
            case egressEndpoints
            case encoderSettings
            case id
            case inputAttachments
            case inputSpecification
            case logLevel
            case name
            case pipelineDetails
            case pipelinesRunningCount
            case roleArn
            case state
            case tags
            case vpc
        }
    }

    public struct StartMultiplexRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId"))
        ]

        public let multiplexId: String

        public init(multiplexId: String) {
            self.multiplexId = multiplexId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StartMultiplexResponse: AWSDecodableShape {
        public let arn: String?
        public let availabilityZones: [String]?
        public let destinations: [MultiplexOutputDestination]?
        public let id: String?
        public let multiplexSettings: MultiplexSettings?
        public let name: String?
        public let pipelinesRunningCount: Int?
        public let programCount: Int?
        public let state: MultiplexState?
        public let tags: [String: String]?

        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case availabilityZones
            case destinations
            case id
            case multiplexSettings
            case name
            case pipelinesRunningCount
            case programCount
            case state
            case tags
        }
    }

    public struct StartTimecode: AWSEncodableShape & AWSDecodableShape {
        /// The timecode for the frame where you want to start the clip. Optional; if not specified, the clip starts at first frame in the file. Enter the timecode as HH:MM:SS:FF or HH:MM:SS;FF.
        public let timecode: String?

        public init(timecode: String? = nil) {
            self.timecode = timecode
        }

        private enum CodingKeys: String, CodingKey {
            case timecode
        }
    }

    public struct StaticImageActivateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The duration in milliseconds for the image to remain on the video. If omitted or set to 0 the duration is unlimited and the image will remain until it is explicitly deactivated.
        public let duration: Int?
        /// The time in milliseconds for the image to fade in. The fade-in starts at the start time of the overlay. Default is 0 (no fade-in).
        public let fadeIn: Int?
        /// Applies only if a duration is specified. The time in milliseconds for the image to fade out. The fade-out starts when the duration time is hit, so it effectively extends the duration. Default is 0 (no fade-out).
        public let fadeOut: Int?
        /// The height of the image when inserted into the video, in pixels. The overlay will be scaled up or down to the specified height. Leave blank to use the native height of the overlay.
        public let height: Int?
        /// The location and filename of the image file to overlay on the video. The file must be a 32-bit BMP, PNG, or TGA file, and must not be larger (in pixels) than the input video.
        public let image: InputLocation
        /// Placement of the left edge of the overlay relative to the left edge of the video frame, in pixels. 0 (the default) is the left edge of the frame. If the placement causes the overlay to extend beyond the right edge of the underlying video, then the overlay is cropped on the right.
        public let imageX: Int?
        /// Placement of the top edge of the overlay relative to the top edge of the video frame, in pixels. 0 (the default) is the top edge of the frame. If the placement causes the overlay to extend beyond the bottom edge of the underlying video, then the overlay is cropped on the bottom.
        public let imageY: Int?
        /// The number of the layer, 0 to 7. There are 8 layers that can be overlaid on the video, each layer with a different image. The layers are in Z order, which means that overlays with higher values of layer are inserted on top of overlays with lower values of layer. Default is 0.
        public let layer: Int?
        /// Opacity of image where 0 is transparent and 100 is fully opaque. Default is 100.
        public let opacity: Int?
        /// The width of the image when inserted into the video, in pixels. The overlay will be scaled up or down to the specified width. Leave blank to use the native width of the overlay.
        public let width: Int?

        public init(duration: Int? = nil, fadeIn: Int? = nil, fadeOut: Int? = nil, height: Int? = nil, image: InputLocation, imageX: Int? = nil, imageY: Int? = nil, layer: Int? = nil, opacity: Int? = nil, width: Int? = nil) {
            self.duration = duration
            self.fadeIn = fadeIn
            self.fadeOut = fadeOut
            self.height = height
            self.image = image
            self.imageX = imageX
            self.imageY = imageY
            self.layer = layer
            self.opacity = opacity
            self.width = width
        }

        public func validate(name: String) throws {
            try self.validate(self.duration, name: "duration", parent: name, min: 0)
            try self.validate(self.fadeIn, name: "fadeIn", parent: name, min: 0)
            try self.validate(self.fadeOut, name: "fadeOut", parent: name, min: 0)
            try self.validate(self.height, name: "height", parent: name, min: 1)
            try self.validate(self.imageX, name: "imageX", parent: name, min: 0)
            try self.validate(self.imageY, name: "imageY", parent: name, min: 0)
            try self.validate(self.layer, name: "layer", parent: name, max: 7)
            try self.validate(self.layer, name: "layer", parent: name, min: 0)
            try self.validate(self.opacity, name: "opacity", parent: name, max: 100)
            try self.validate(self.opacity, name: "opacity", parent: name, min: 0)
            try self.validate(self.width, name: "width", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case duration
            case fadeIn
            case fadeOut
            case height
            case image
            case imageX
            case imageY
            case layer
            case opacity
            case width
        }
    }

    public struct StaticImageDeactivateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The time in milliseconds for the image to fade out. Default is 0 (no fade-out).
        public let fadeOut: Int?
        /// The image overlay layer to deactivate, 0 to 7. Default is 0.
        public let layer: Int?

        public init(fadeOut: Int? = nil, layer: Int? = nil) {
            self.fadeOut = fadeOut
            self.layer = layer
        }

        public func validate(name: String) throws {
            try self.validate(self.fadeOut, name: "fadeOut", parent: name, min: 0)
            try self.validate(self.layer, name: "layer", parent: name, max: 7)
            try self.validate(self.layer, name: "layer", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case fadeOut
            case layer
        }
    }

    public struct StaticKeySettings: AWSEncodableShape & AWSDecodableShape {
        /// The URL of the license server used for protecting content.
        public let keyProviderServer: InputLocation?
        /// Static key value as a 32 character hexadecimal string.
        public let staticKeyValue: String

        public init(keyProviderServer: InputLocation? = nil, staticKeyValue: String) {
            self.keyProviderServer = keyProviderServer
            self.staticKeyValue = staticKeyValue
        }

        public func validate(name: String) throws {
            try self.validate(self.staticKeyValue, name: "staticKeyValue", parent: name, max: 32)
            try self.validate(self.staticKeyValue, name: "staticKeyValue", parent: name, min: 32)
        }

        private enum CodingKeys: String, CodingKey {
            case keyProviderServer
            case staticKeyValue
        }
    }

    public struct StopChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelId", location: .uri(locationName: "channelId"))
        ]

        public let channelId: String

        public init(channelId: String) {
            self.channelId = channelId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StopChannelResponse: AWSDecodableShape {
        public let arn: String?
        public let cdiInputSpecification: CdiInputSpecification?
        public let channelClass: ChannelClass?
        public let destinations: [OutputDestination]?
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        public let id: String?
        public let inputAttachments: [InputAttachment]?
        public let inputSpecification: InputSpecification?
        public let logLevel: LogLevel?
        public let name: String?
        public let pipelineDetails: [PipelineDetail]?
        public let pipelinesRunningCount: Int?
        public let roleArn: String?
        public let state: ChannelState?
        public let tags: [String: String]?
        public let vpc: VpcOutputSettings?

        public init(arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettings? = nil) {
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case cdiInputSpecification
            case channelClass
            case destinations
            case egressEndpoints
            case encoderSettings
            case id
            case inputAttachments
            case inputSpecification
            case logLevel
            case name
            case pipelineDetails
            case pipelinesRunningCount
            case roleArn
            case state
            case tags
            case vpc
        }
    }

    public struct StopMultiplexRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId"))
        ]

        public let multiplexId: String

        public init(multiplexId: String) {
            self.multiplexId = multiplexId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StopMultiplexResponse: AWSDecodableShape {
        public let arn: String?
        public let availabilityZones: [String]?
        public let destinations: [MultiplexOutputDestination]?
        public let id: String?
        public let multiplexSettings: MultiplexSettings?
        public let name: String?
        public let pipelinesRunningCount: Int?
        public let programCount: Int?
        public let state: MultiplexState?
        public let tags: [String: String]?

        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case availabilityZones
            case destinations
            case id
            case multiplexSettings
            case name
            case pipelinesRunningCount
            case programCount
            case state
            case tags
        }
    }

    public struct StopTimecode: AWSEncodableShape & AWSDecodableShape {
        /// If you specify a StopTimecode in an input (in order to clip the file), you can specify if you want the clip to exclude (the default) or include the frame specified by the timecode.
        public let lastFrameClippingBehavior: LastFrameClippingBehavior?
        /// The timecode for the frame where you want to stop the clip. Optional; if not specified, the clip continues to the end of the file. Enter the timecode as HH:MM:SS:FF or HH:MM:SS;FF.
        public let timecode: String?

        public init(lastFrameClippingBehavior: LastFrameClippingBehavior? = nil, timecode: String? = nil) {
            self.lastFrameClippingBehavior = lastFrameClippingBehavior
            self.timecode = timecode
        }

        private enum CodingKeys: String, CodingKey {
            case lastFrameClippingBehavior
            case timecode
        }
    }

    public struct TeletextDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct TeletextSourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the teletext page number within the data stream from which to extract captions. Range of 0x100 (256) to 0x8FF (2303). Unused for passthrough. Should be specified as a hexadecimal string with no "0x" prefix.
        public let pageNumber: String?

        public init(pageNumber: String? = nil) {
            self.pageNumber = pageNumber
        }

        private enum CodingKeys: String, CodingKey {
            case pageNumber
        }
    }

    public struct TemporalFilterSettings: AWSEncodableShape & AWSDecodableShape {
        /// If you enable this filter, the results are the following:
        /// - If the source content is noisy (it contains excessive digital artifacts), the filter cleans up the source.
        /// - If the source content is already clean, the filter tends to decrease the bitrate, especially when the rate control mode is QVBR.
        public let postFilterSharpening: TemporalFilterPostFilterSharpening?
        /// Choose a filter strength. We recommend a strength of 1 or 2. A higher strength might take out good information, resulting in an image that is overly soft.
        public let strength: TemporalFilterStrength?

        public init(postFilterSharpening: TemporalFilterPostFilterSharpening? = nil, strength: TemporalFilterStrength? = nil) {
            self.postFilterSharpening = postFilterSharpening
            self.strength = strength
        }

        private enum CodingKeys: String, CodingKey {
            case postFilterSharpening
            case strength
        }
    }

    public struct TimecodeConfig: AWSEncodableShape & AWSDecodableShape {
        /// Identifies the source for the timecode that will be associated with the events outputs.
        /// -Embedded (embedded): Initialize the output timecode with timecode from the the source.  If no embedded timecode is detected in the source, the system falls back to using "Start at 0" (zerobased).
        /// -System Clock (systemclock): Use the UTC time.
        /// -Start at 0 (zerobased): The time of the first frame of the event will be 00:00:00:00.
        public let source: TimecodeConfigSource
        /// Threshold in frames beyond which output timecode is resynchronized to the input timecode. Discrepancies below this threshold are permitted to avoid unnecessary discontinuities in the output timecode. No timecode sync when this is not specified.
        public let syncThreshold: Int?

        public init(source: TimecodeConfigSource, syncThreshold: Int? = nil) {
            self.source = source
            self.syncThreshold = syncThreshold
        }

        public func validate(name: String) throws {
            try self.validate(self.syncThreshold, name: "syncThreshold", parent: name, max: 1_000_000)
            try self.validate(self.syncThreshold, name: "syncThreshold", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case source
            case syncThreshold
        }
    }

    public struct TransferInputDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputDeviceId", location: .uri(locationName: "inputDeviceId"))
        ]

        public let inputDeviceId: String
        public let targetCustomerId: String?
        public let transferMessage: String?

        public init(inputDeviceId: String, targetCustomerId: String? = nil, transferMessage: String? = nil) {
            self.inputDeviceId = inputDeviceId
            self.targetCustomerId = targetCustomerId
            self.transferMessage = transferMessage
        }

        private enum CodingKeys: String, CodingKey {
            case targetCustomerId
            case transferMessage
        }
    }

    public struct TransferInputDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct TransferringInputDeviceSummary: AWSDecodableShape {
        /// The unique ID of the input device.
        public let id: String?
        /// The optional message that the sender has attached to the transfer.
        public let message: String?
        /// The AWS account ID for the recipient of the input device transfer.
        public let targetCustomerId: String?
        /// The type (direction) of the input device transfer.
        public let transferType: InputDeviceTransferType?

        public init(id: String? = nil, message: String? = nil, targetCustomerId: String? = nil, transferType: InputDeviceTransferType? = nil) {
            self.id = id
            self.message = message
            self.targetCustomerId = targetCustomerId
            self.transferType = transferType
        }

        private enum CodingKeys: String, CodingKey {
            case id
            case message
            case targetCustomerId
            case transferType
        }
    }

    public struct TtmlDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// When set to passthrough, passes through style and position information from a TTML-like input source (TTML, SMPTE-TT, CFF-TT) to the CFF-TT output or TTML output.
        public let styleControl: TtmlDestinationStyleControl?

        public init(styleControl: TtmlDestinationStyleControl? = nil) {
            self.styleControl = styleControl
        }

        private enum CodingKeys: String, CodingKey {
            case styleControl
        }
    }

    public struct UdpContainerSettings: AWSEncodableShape & AWSDecodableShape {
        public let m2tsSettings: M2tsSettings?

        public init(m2tsSettings: M2tsSettings? = nil) {
            self.m2tsSettings = m2tsSettings
        }

        public func validate(name: String) throws {
            try self.m2tsSettings?.validate(name: "\(name).m2tsSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case m2tsSettings
        }
    }

    public struct UdpGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies behavior of last resort when input video is lost, and no more backup inputs are available. When dropTs is selected the entire transport stream will stop being emitted.  When dropProgram is selected the program can be dropped from the transport stream (and replaced with null packets to meet the TS bitrate requirement).  Or, when emitProgram is chosen the transport stream will continue to be produced normally with repeat frames, black frames, or slate frames substituted for the absent input video.
        public let inputLossAction: InputLossActionForUdpOut?
        /// Indicates ID3 frame that has the timecode.
        public let timedMetadataId3Frame: UdpTimedMetadataId3Frame?
        /// Timed Metadata interval in seconds.
        public let timedMetadataId3Period: Int?

        public init(inputLossAction: InputLossActionForUdpOut? = nil, timedMetadataId3Frame: UdpTimedMetadataId3Frame? = nil, timedMetadataId3Period: Int? = nil) {
            self.inputLossAction = inputLossAction
            self.timedMetadataId3Frame = timedMetadataId3Frame
            self.timedMetadataId3Period = timedMetadataId3Period
        }

        public func validate(name: String) throws {
            try self.validate(self.timedMetadataId3Period, name: "timedMetadataId3Period", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case inputLossAction
            case timedMetadataId3Frame
            case timedMetadataId3Period
        }
    }

    public struct UdpOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// UDP output buffering in milliseconds. Larger values increase latency through the transcoder but simultaneously assist the transcoder in maintaining a constant, low-jitter UDP/RTP output while accommodating clock recovery, input switching, input disruptions, picture reordering, etc.
        public let bufferMsec: Int?
        public let containerSettings: UdpContainerSettings
        /// Destination address and port number for RTP or UDP packets. Can be unicast or multicast RTP or UDP (eg. rtp://239.10.10.10:5001 or udp://10.100.100.100:5002).
        public let destination: OutputLocationRef
        /// Settings for enabling and adjusting Forward Error Correction on UDP outputs.
        public let fecOutputSettings: FecOutputSettings?

        public init(bufferMsec: Int? = nil, containerSettings: UdpContainerSettings, destination: OutputLocationRef, fecOutputSettings: FecOutputSettings? = nil) {
            self.bufferMsec = bufferMsec
            self.containerSettings = containerSettings
            self.destination = destination
            self.fecOutputSettings = fecOutputSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.bufferMsec, name: "bufferMsec", parent: name, max: 10000)
            try self.validate(self.bufferMsec, name: "bufferMsec", parent: name, min: 0)
            try self.containerSettings.validate(name: "\(name).containerSettings")
            try self.fecOutputSettings?.validate(name: "\(name).fecOutputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case bufferMsec
            case containerSettings
            case destination
            case fecOutputSettings
        }
    }

    public struct UpdateChannelClassRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelId", location: .uri(locationName: "channelId"))
        ]

        public let channelClass: ChannelClass
        public let channelId: String
        public let destinations: [OutputDestination]?

        public init(channelClass: ChannelClass, channelId: String, destinations: [OutputDestination]? = nil) {
            self.channelClass = channelClass
            self.channelId = channelId
            self.destinations = destinations
        }

        public func validate(name: String) throws {
            try self.destinations?.forEach {
                try $0.validate(name: "\(name).destinations[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case channelClass
            case destinations
        }
    }

    public struct UpdateChannelClassResponse: AWSDecodableShape {
        public let channel: Channel?

        public init(channel: Channel? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel
        }
    }

    public struct UpdateChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelId", location: .uri(locationName: "channelId"))
        ]

        public let cdiInputSpecification: CdiInputSpecification?
        public let channelId: String
        public let destinations: [OutputDestination]?
        public let encoderSettings: EncoderSettings?
        public let inputAttachments: [InputAttachment]?
        public let inputSpecification: InputSpecification?
        public let logLevel: LogLevel?
        public let name: String?
        public let roleArn: String?

        public init(cdiInputSpecification: CdiInputSpecification? = nil, channelId: String, destinations: [OutputDestination]? = nil, encoderSettings: EncoderSettings? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, name: String? = nil, roleArn: String? = nil) {
            self.cdiInputSpecification = cdiInputSpecification
            self.channelId = channelId
            self.destinations = destinations
            self.encoderSettings = encoderSettings
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.name = name
            self.roleArn = roleArn
        }

        public func validate(name: String) throws {
            try self.destinations?.forEach {
                try $0.validate(name: "\(name).destinations[]")
            }
            try self.encoderSettings?.validate(name: "\(name).encoderSettings")
            try self.inputAttachments?.forEach {
                try $0.validate(name: "\(name).inputAttachments[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case cdiInputSpecification
            case destinations
            case encoderSettings
            case inputAttachments
            case inputSpecification
            case logLevel
            case name
            case roleArn
        }
    }

    public struct UpdateChannelResponse: AWSDecodableShape {
        public let channel: Channel?

        public init(channel: Channel? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel
        }
    }

    public struct UpdateInputDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputDeviceId", location: .uri(locationName: "inputDeviceId"))
        ]

        public let hdDeviceSettings: InputDeviceConfigurableSettings?
        public let inputDeviceId: String
        public let name: String?
        public let uhdDeviceSettings: InputDeviceConfigurableSettings?

        public init(hdDeviceSettings: InputDeviceConfigurableSettings? = nil, inputDeviceId: String, name: String? = nil, uhdDeviceSettings: InputDeviceConfigurableSettings? = nil) {
            self.hdDeviceSettings = hdDeviceSettings
            self.inputDeviceId = inputDeviceId
            self.name = name
            self.uhdDeviceSettings = uhdDeviceSettings
        }

        private enum CodingKeys: String, CodingKey {
            case hdDeviceSettings
            case name
            case uhdDeviceSettings
        }
    }

    public struct UpdateInputDeviceResponse: AWSDecodableShape {
        public let arn: String?
        public let connectionState: InputDeviceConnectionState?
        public let deviceSettingsSyncState: DeviceSettingsSyncState?
        public let deviceUpdateStatus: DeviceUpdateStatus?
        public let hdDeviceSettings: InputDeviceHdSettings?
        public let id: String?
        public let macAddress: String?
        public let name: String?
        public let networkSettings: InputDeviceNetworkSettings?
        public let serialNumber: String?
        public let type: InputDeviceType?
        public let uhdDeviceSettings: InputDeviceUhdSettings?

        public init(arn: String? = nil, connectionState: InputDeviceConnectionState? = nil, deviceSettingsSyncState: DeviceSettingsSyncState? = nil, deviceUpdateStatus: DeviceUpdateStatus? = nil, hdDeviceSettings: InputDeviceHdSettings? = nil, id: String? = nil, macAddress: String? = nil, name: String? = nil, networkSettings: InputDeviceNetworkSettings? = nil, serialNumber: String? = nil, type: InputDeviceType? = nil, uhdDeviceSettings: InputDeviceUhdSettings? = nil) {
            self.arn = arn
            self.connectionState = connectionState
            self.deviceSettingsSyncState = deviceSettingsSyncState
            self.deviceUpdateStatus = deviceUpdateStatus
            self.hdDeviceSettings = hdDeviceSettings
            self.id = id
            self.macAddress = macAddress
            self.name = name
            self.networkSettings = networkSettings
            self.serialNumber = serialNumber
            self.type = type
            self.uhdDeviceSettings = uhdDeviceSettings
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case connectionState
            case deviceSettingsSyncState
            case deviceUpdateStatus
            case hdDeviceSettings
            case id
            case macAddress
            case name
            case networkSettings
            case serialNumber
            case type
            case uhdDeviceSettings
        }
    }

    public struct UpdateInputRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputId", location: .uri(locationName: "inputId"))
        ]

        public let destinations: [InputDestinationRequest]?
        public let inputDevices: [InputDeviceRequest]?
        public let inputId: String
        public let inputSecurityGroups: [String]?
        public let mediaConnectFlows: [MediaConnectFlowRequest]?
        public let name: String?
        public let roleArn: String?
        public let sources: [InputSourceRequest]?

        public init(destinations: [InputDestinationRequest]? = nil, inputDevices: [InputDeviceRequest]? = nil, inputId: String, inputSecurityGroups: [String]? = nil, mediaConnectFlows: [MediaConnectFlowRequest]? = nil, name: String? = nil, roleArn: String? = nil, sources: [InputSourceRequest]? = nil) {
            self.destinations = destinations
            self.inputDevices = inputDevices
            self.inputId = inputId
            self.inputSecurityGroups = inputSecurityGroups
            self.mediaConnectFlows = mediaConnectFlows
            self.name = name
            self.roleArn = roleArn
            self.sources = sources
        }

        private enum CodingKeys: String, CodingKey {
            case destinations
            case inputDevices
            case inputSecurityGroups
            case mediaConnectFlows
            case name
            case roleArn
            case sources
        }
    }

    public struct UpdateInputResponse: AWSDecodableShape {
        public let input: Input?

        public init(input: Input? = nil) {
            self.input = input
        }

        private enum CodingKeys: String, CodingKey {
            case input
        }
    }

    public struct UpdateInputSecurityGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "inputSecurityGroupId", location: .uri(locationName: "inputSecurityGroupId"))
        ]

        public let inputSecurityGroupId: String
        public let tags: [String: String]?
        public let whitelistRules: [InputWhitelistRuleCidr]?

        public init(inputSecurityGroupId: String, tags: [String: String]? = nil, whitelistRules: [InputWhitelistRuleCidr]? = nil) {
            self.inputSecurityGroupId = inputSecurityGroupId
            self.tags = tags
            self.whitelistRules = whitelistRules
        }

        private enum CodingKeys: String, CodingKey {
            case tags
            case whitelistRules
        }
    }

    public struct UpdateInputSecurityGroupResponse: AWSDecodableShape {
        public let securityGroup: InputSecurityGroup?

        public init(securityGroup: InputSecurityGroup? = nil) {
            self.securityGroup = securityGroup
        }

        private enum CodingKeys: String, CodingKey {
            case securityGroup
        }
    }

    public struct UpdateMultiplexProgramRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId")),
            AWSMemberEncoding(label: "programName", location: .uri(locationName: "programName"))
        ]

        public let multiplexId: String
        public let multiplexProgramSettings: MultiplexProgramSettings?
        public let programName: String

        public init(multiplexId: String, multiplexProgramSettings: MultiplexProgramSettings? = nil, programName: String) {
            self.multiplexId = multiplexId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.programName = programName
        }

        public func validate(name: String) throws {
            try self.multiplexProgramSettings?.validate(name: "\(name).multiplexProgramSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexProgramSettings
        }
    }

    public struct UpdateMultiplexProgramResponse: AWSDecodableShape {
        public let multiplexProgram: MultiplexProgram?

        public init(multiplexProgram: MultiplexProgram? = nil) {
            self.multiplexProgram = multiplexProgram
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexProgram
        }
    }

    public struct UpdateMultiplexRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "multiplexId", location: .uri(locationName: "multiplexId"))
        ]

        public let multiplexId: String
        public let multiplexSettings: MultiplexSettings?
        public let name: String?

        public init(multiplexId: String, multiplexSettings: MultiplexSettings? = nil, name: String? = nil) {
            self.multiplexId = multiplexId
            self.multiplexSettings = multiplexSettings
            self.name = name
        }

        public func validate(name: String) throws {
            try self.multiplexSettings?.validate(name: "\(name).multiplexSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexSettings
            case name
        }
    }

    public struct UpdateMultiplexResponse: AWSDecodableShape {
        public let multiplex: Multiplex?

        public init(multiplex: Multiplex? = nil) {
            self.multiplex = multiplex
        }

        private enum CodingKeys: String, CodingKey {
            case multiplex
        }
    }

    public struct UpdateReservationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "reservationId", location: .uri(locationName: "reservationId"))
        ]

        public let name: String?
        public let reservationId: String

        public init(name: String? = nil, reservationId: String) {
            self.name = name
            self.reservationId = reservationId
        }

        private enum CodingKeys: String, CodingKey {
            case name
        }
    }

    public struct UpdateReservationResponse: AWSDecodableShape {
        public let reservation: Reservation?

        public init(reservation: Reservation? = nil) {
            self.reservation = reservation
        }

        private enum CodingKeys: String, CodingKey {
            case reservation
        }
    }

    public struct VideoBlackFailoverSettings: AWSEncodableShape & AWSDecodableShape {
        /// A value used in calculating the threshold below which MediaLive considers a pixel to be 'black'. For the input to be considered black, every pixel in a frame must be below this threshold. The threshold is calculated as a percentage (expressed as a decimal) of white. Therefore .1 means 10% white (or 90% black). Note how the formula works for any color depth. For example, if you set this field to 0.1 in 10-bit color depth: (1023*0.1=102.3), which means a pixel value of 102 or less is 'black'. If you set this field to .1 in an 8-bit color depth: (255*0.1=25.5), which means a pixel value of 25 or less is 'black'. The range is 0.0 to 1.0, with any number of decimal places.
        public let blackDetectThreshold: Double?
        /// The amount of time (in milliseconds) that the active input must be black before automatic input failover occurs.
        public let videoBlackThresholdMsec: Int?

        public init(blackDetectThreshold: Double? = nil, videoBlackThresholdMsec: Int? = nil) {
            self.blackDetectThreshold = blackDetectThreshold
            self.videoBlackThresholdMsec = videoBlackThresholdMsec
        }

        public func validate(name: String) throws {
            try self.validate(self.videoBlackThresholdMsec, name: "videoBlackThresholdMsec", parent: name, min: 1000)
        }

        private enum CodingKeys: String, CodingKey {
            case blackDetectThreshold
            case videoBlackThresholdMsec
        }
    }

    public struct VideoCodecSettings: AWSEncodableShape & AWSDecodableShape {
        public let frameCaptureSettings: FrameCaptureSettings?
        public let h264Settings: H264Settings?
        public let h265Settings: H265Settings?
        public let mpeg2Settings: Mpeg2Settings?

        public init(frameCaptureSettings: FrameCaptureSettings? = nil, h264Settings: H264Settings? = nil, h265Settings: H265Settings? = nil, mpeg2Settings: Mpeg2Settings? = nil) {
            self.frameCaptureSettings = frameCaptureSettings
            self.h264Settings = h264Settings
            self.h265Settings = h265Settings
            self.mpeg2Settings = mpeg2Settings
        }

        public func validate(name: String) throws {
            try self.frameCaptureSettings?.validate(name: "\(name).frameCaptureSettings")
            try self.h264Settings?.validate(name: "\(name).h264Settings")
            try self.h265Settings?.validate(name: "\(name).h265Settings")
            try self.mpeg2Settings?.validate(name: "\(name).mpeg2Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case frameCaptureSettings
            case h264Settings
            case h265Settings
            case mpeg2Settings
        }
    }

    public struct VideoDescription: AWSEncodableShape & AWSDecodableShape {
        /// Video codec settings.
        public let codecSettings: VideoCodecSettings?
        /// Output video height, in pixels. Must be an even number. For most codecs, you can leave this field and width blank in order to use the height and width (resolution) from the source. Note, however, that leaving blank is not recommended. For the Frame Capture codec, height and width are required.
        public let height: Int?
        /// The name of this VideoDescription. Outputs will use this name to uniquely identify this Description.  Description names should be unique within this Live Event.
        public let name: String
        /// Indicates how MediaLive will respond to the AFD values that might be in the input video. If you do not know what AFD signaling is, or if your downstream system has not given you guidance, choose PASSTHROUGH.
        /// RESPOND: MediaLive clips the input video using a formula that uses the AFD values (configured in afdSignaling ), the input display aspect ratio, and the output display aspect ratio. MediaLive also includes the AFD values in the output, unless the codec for this encode is FRAME_CAPTURE.
        /// PASSTHROUGH: MediaLive ignores the AFD values and does not clip the video. But MediaLive does include the values in the output.
        /// NONE: MediaLive does not clip the input video and does not include the AFD values in the output
        public let respondToAfd: VideoDescriptionRespondToAfd?
        /// STRETCH_TO_OUTPUT configures the output position to stretch the video to the specified output resolution (height and width). This option will override any position value. DEFAULT may insert black boxes (pillar boxes or letter boxes) around the video to provide the specified output resolution.
        public let scalingBehavior: VideoDescriptionScalingBehavior?
        /// Changes the strength of the anti-alias filter used for scaling. 0 is the softest setting, 100 is the sharpest. A setting of 50 is recommended for most content.
        public let sharpness: Int?
        /// Output video width, in pixels. Must be an even number. For most codecs, you can leave this field and height blank in order to use the height and width (resolution) from the source. Note, however, that leaving blank is not recommended. For the Frame Capture codec, height and width are required.
        public let width: Int?

        public init(codecSettings: VideoCodecSettings? = nil, height: Int? = nil, name: String, respondToAfd: VideoDescriptionRespondToAfd? = nil, scalingBehavior: VideoDescriptionScalingBehavior? = nil, sharpness: Int? = nil, width: Int? = nil) {
            self.codecSettings = codecSettings
            self.height = height
            self.name = name
            self.respondToAfd = respondToAfd
            self.scalingBehavior = scalingBehavior
            self.sharpness = sharpness
            self.width = width
        }

        public func validate(name: String) throws {
            try self.codecSettings?.validate(name: "\(name).codecSettings")
            try self.validate(self.sharpness, name: "sharpness", parent: name, max: 100)
            try self.validate(self.sharpness, name: "sharpness", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case codecSettings
            case height
            case name
            case respondToAfd
            case scalingBehavior
            case sharpness
            case width
        }
    }

    public struct VideoSelector: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the color space of an input. This setting works in tandem with colorSpaceUsage and a video description's colorSpaceSettingsChoice to determine if any conversion will be performed.
        public let colorSpace: VideoSelectorColorSpace?
        /// Applies only if colorSpace is a value other than follow. This field controls how the value in the colorSpace field will be used. fallback means that when the input does include color space data, that data will be used, but when the input has no color space data, the value in colorSpace will be used. Choose fallback if your input is sometimes missing color space data, but when it does have color space data, that data is correct. force means to always use the value in colorSpace. Choose force if your input usually has no color space data or might have unreliable color space data.
        public let colorSpaceUsage: VideoSelectorColorSpaceUsage?
        /// The video selector settings.
        public let selectorSettings: VideoSelectorSettings?

        public init(colorSpace: VideoSelectorColorSpace? = nil, colorSpaceUsage: VideoSelectorColorSpaceUsage? = nil, selectorSettings: VideoSelectorSettings? = nil) {
            self.colorSpace = colorSpace
            self.colorSpaceUsage = colorSpaceUsage
            self.selectorSettings = selectorSettings
        }

        public func validate(name: String) throws {
            try self.selectorSettings?.validate(name: "\(name).selectorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case colorSpace
            case colorSpaceUsage
            case selectorSettings
        }
    }

    public struct VideoSelectorPid: AWSEncodableShape & AWSDecodableShape {
        /// Selects a specific PID from within a video source.
        public let pid: Int?

        public init(pid: Int? = nil) {
            self.pid = pid
        }

        public func validate(name: String) throws {
            try self.validate(self.pid, name: "pid", parent: name, max: 8191)
            try self.validate(self.pid, name: "pid", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case pid
        }
    }

    public struct VideoSelectorProgramId: AWSEncodableShape & AWSDecodableShape {
        /// Selects a specific program from within a multi-program transport stream. If the program doesn't exist, the first program within the transport stream will be selected by default.
        public let programId: Int?

        public init(programId: Int? = nil) {
            self.programId = programId
        }

        public func validate(name: String) throws {
            try self.validate(self.programId, name: "programId", parent: name, max: 65536)
            try self.validate(self.programId, name: "programId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case programId
        }
    }

    public struct VideoSelectorSettings: AWSEncodableShape & AWSDecodableShape {
        public let videoSelectorPid: VideoSelectorPid?
        public let videoSelectorProgramId: VideoSelectorProgramId?

        public init(videoSelectorPid: VideoSelectorPid? = nil, videoSelectorProgramId: VideoSelectorProgramId? = nil) {
            self.videoSelectorPid = videoSelectorPid
            self.videoSelectorProgramId = videoSelectorProgramId
        }

        public func validate(name: String) throws {
            try self.videoSelectorPid?.validate(name: "\(name).videoSelectorPid")
            try self.videoSelectorProgramId?.validate(name: "\(name).videoSelectorProgramId")
        }

        private enum CodingKeys: String, CodingKey {
            case videoSelectorPid
            case videoSelectorProgramId
        }
    }

    public struct VpcOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// List of public address allocation ids to associate with ENIs that will be created in Output VPC.
        /// Must specify one for SINGLE_PIPELINE, two for STANDARD channels
        public let publicAddressAllocationIds: [String]?
        /// A list of up to 5 EC2 VPC security group IDs to attach to the Output VPC network interfaces.
        /// If none are specified then the VPC default security group will be used
        public let securityGroupIds: [String]?
        /// A list of VPC subnet IDs from the same VPC.
        /// If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).
        public let subnetIds: [String]

        public init(publicAddressAllocationIds: [String]? = nil, securityGroupIds: [String]? = nil, subnetIds: [String]) {
            self.publicAddressAllocationIds = publicAddressAllocationIds
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
        }

        private enum CodingKeys: String, CodingKey {
            case publicAddressAllocationIds
            case securityGroupIds
            case subnetIds
        }
    }

    public struct WavSettings: AWSEncodableShape & AWSDecodableShape {
        /// Bits per sample.
        public let bitDepth: Double?
        /// The audio coding mode for the WAV audio. The mode determines the number of channels in the audio.
        public let codingMode: WavCodingMode?
        /// Sample rate in Hz.
        public let sampleRate: Double?

        public init(bitDepth: Double? = nil, codingMode: WavCodingMode? = nil, sampleRate: Double? = nil) {
            self.bitDepth = bitDepth
            self.codingMode = codingMode
            self.sampleRate = sampleRate
        }

        private enum CodingKeys: String, CodingKey {
            case bitDepth
            case codingMode
            case sampleRate
        }
    }

    public struct WebvttDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }
}
